properties-maven-plugin: ошибка загрузки свойства-файл
Я хочу извлечь все свойства из моего pom.xml в файл свойств. Это общие свойства, такие как dependency-versions, plugin-versions и каталоги. Я использую properties-maven-plugin, но он не работает так, как я хочу.
существенная часть моего пом.XML-код:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${basedir}/pom.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
теперь, когда я запускаю "mvn properties: read-project-properties", я получаю следующую ошибку:
[INFO] One or more required plugin parameters are invalid/missing for 'properties:read-project-properties'
[0] Inside the definition for plugin 'properties-maven-plugin' specify the following:
<configuration>
...
<files>VALUE</files>
</configuration>.
пом.свойства-файл находится в том же каталоге, что и ПФЛ.XML. Что я могу сделать, чтобы properties-maven-plugin прочитал мой файл свойств?
редактировать
Я подал вопрос в http://jira.codehaus.org/browse/MOJO-1523. Он был закрыт как "не ошибка", причина:
это по дизайну. Определение проекта должен быть самодостаточным, иначе он больше не является полным, если он refered из других мест как часть транзитивные зависимости.
4 ответов
код configuration
элемент определяется внутри execution
и таким образом относится к этому execution
только.
так что либо называть mvn initialize
(или фаза, предшествующая initialize
), чтобы использовать configuration
текущего execution
привязка.
или используйте глобальный configuration
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<configuration>
<files>
<file>etc/config/dev.properties</file>
</files>
</configuration>
...
</plugin>
а потом звоните
mvn properties:read-project-properties
но это не имело бы большого смысла в конкретном случае этого плагина (вы хотите, чтобы свойства были доступны во время сборки), так что это остается первое решение.
обновление: я сделал тест со своей стороны и, действительно, со следующим POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q2664362</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>etc/config/dev.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
под управлением mvn test
не будет работать: maven попытается загрузить junit:jar:${junit.version}
(т. е. он не использует значение свойства) и это явно не получится.
$ mvn test [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building SO - Q2664362 - maven-properties-plugin demo [INFO] task-segment: [test] [INFO] ------------------------------------------------------------------------ [INFO] [properties:read-project-properties {execution: default}] [INFO] [resources:resources {execution: default-resources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/pascal/Projects/stackoverflow/Q2664362/src/main/resources Downloading: http://repo1.maven.org/maven2/junit/junit/${junit.version}/junit-${junit.version}.pom [INFO] Unable to find resource 'junit:junit:pom:${junit.version}' in repository central (http://repo1.maven.org/maven2) [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [resources:testResources {execution: default-testResources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/pascal/Projects/stackoverflow/Q2664362/src/test/resources Downloading: http://repo1.maven.org/maven2/junit/junit/${junit.version}/junit-${junit.version}.jar [INFO] Unable to find resource 'junit:junit:jar:${junit.version}' in repository central (http://repo1.maven.org/maven2) [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Failed to resolve artifact. ...
нечетная часть заключается в том, что загрузка зависимости происходит после properties:read-project-properties
. Я не уверен, но это звучит как ошибка, вы должны открыть проблема.
попробуйте использовать validate phase вместо инициализации для maven 3.x (ссылке).
EDIT2
посмотреть здесь для обходного пути с использованием задач Ant, что делает этот вариант использования возможным
я сталкиваюсь с вашим вопросом, но я попытался добавить эти ресурсы здесь, он работает хорошо.
<build>
<resources>
<resource>
<directory>src/config</directory> //your config folder
<filtering>true</filtering>
</resource>
</resources>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>src/config/config.properties</file> //your config file
</files>
</configuration>
</execution>
</executions>
</plugin>
</build>
Hope you resolve this as above