Maven - чтение свойства из файла внешних свойств

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

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

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

Кажется, что свойство не считывается из файла, если оно ссылается на объявление зависимости, но читается, если его ссылают из другого места. Любые идеи?

Ответ 1

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

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

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

Ответ 2

u может определить следующее:

<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>