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>