Maven - чтение свойства из внешнего файла свойств - PullRequest
17 голосов
/ 28 марта 2012

У меня есть файл свойств со следующим

junit.version=3.8.1
dbcp.version=5.5.27
oracle.jdbc.version=10.2.0.2.0

Я пытаюсь прочитать эти свойства из моего файла pom, как показано ниже

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>${junit.version}</version>
  <scope>test</scope>
</dependency>


<dependency>
    <groupId>dbcp</groupId>
    <artifactId>dbcp</artifactId>
    <version>${dbcp.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc14</artifactId>
  <version>${oracle.jdbc.version}</version>
  <scope>provided</scope>
</dependency>

и настройка плагина

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <executions>
           <!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. -->
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>../live.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
      </plugin>

Я обнаружил, что когда я запускаю mvn clean install, он не находит свойства, вместо этого появляются следующие ошибки:

'dependencies.dependency.version' for junit:junit:jar must be a valid version but is '${junit.version}'. @ line 23, column 16
'dependencies.dependency.version' for dbcp:dbcp:jar must be a valid version but is '${dbcp.version}'. @ line 31, column 12
'dependencies.dependency.version' for com.oracle:ojdbc14:jar must be a valid version but is '${oracle.jdbc.version}'. @ line 37, column 13

Вышеуказанные сбои появляются в ситуациях, когда я ссылаюсь на свойство, когда объявляю зависимость. Я обнаружил, что в некоторых других ситуациях свойство читается из файла. Например, это работает, если я использую свойство в теге версии проекта (не версия зависимости)

Похоже, что свойство не читается из файла, если на него ссылаются из объявления зависимости, а читается, если на него ссылаются из других источников Есть идеи?

Ответы [ 2 ]

13 голосов
/ 28 марта 2012

Фаза initialize не является частью чистого жизненного цикла .Вам также необходимо привязать ваш плагин свойств к pre-clean phase.

Однако разрешение зависимостей запускается до разрешения и запуска других плагинов, поэтому ваш подход не будет работать.иметь дело с этим - переместить версии зависимостей в родительский pom.xml и использовать один и тот же родительский pom в обоих ваших проектах.

2 голосов
/ 09 июля 2013

вы можете определить так:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-2</version>
            <executions>
                <execution>
                <id>pre-clean-config</id>
                    <phase>pre-clean</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>config.properties</file>
                        </files>
                    </configuration>
                </execution>
                <execution>
                <id>initialize-config</id>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                    <configuration>
                        <files>
                            <file>config.properties</file>
                        </files>
                    </configuration>
                </execution>
            </executions>
        </plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...