我想使用properties-maven-plugin。我阅读了http://mojohaus.org/properties-maven-plugin/usage.html的使用方法,但它并不适用于我。
我创建了一个非常简单的项目来测试它。这是我的pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>MavenTest</artifactId>
<version>1.0.0</version>
<name>MavenTest</name>
<properties>
<prop1>2.2</prop1>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
<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>${basedir}/my.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
org.codehaus.mojo
</groupId>
<artifactId>
properties-maven-plugin
</artifactId>
<versionRange>
[1.0-alpha-2,)
</versionRange>
<goals>
<goal>
read-project-properties
</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
如果我运行mvn compile,或者mvn install,结果是:
[ERROR] The build could not read 1 project -> [Help 1]
org.apache.maven.project.ProjectBuildingException: Some problems were encountered while processing the POMs:
[ERROR] 'dependencies.dependency.version' for org.apache.logging.log4j:log4j-api:jar must be a valid version but is '${log4j.version}'. @ line 16, column 13
&#34; my.properties&#34;文件包含:
log4j.version=2.2
如下所述:mojohaus
如果我使用pom.xml中定义的prop1属性,一切正常。
那么我做错了什么?
答案 0 :(得分:5)
他们的官方回答是不支持使用read-project-properties设置依赖项版本:https://github.com/mojohaus/properties-maven-plugin/issues/26
这不起作用,也不是属性maven插件的意图,而且从文件中读取属性以定义依赖项版本会有什么好处?
关于这个问题的答案有一个非常直接的解释:https://stackoverflow.com/a/14727072/1707491
答案 1 :(得分:1)
确保您的$ {basedir} /my.properties文件与该特定属性值对一起出现: my.properties的内容应该是: PROP1 = 2.3
答案 2 :(得分:0)
您必须在要使用它们时定义版本属性。该插件只允许你这样做;但你必须自己设定值。 像
<properties>
<log4j.version>1.2.17</log4j.version>
</properties>
编辑:
如你所示,你已经做到了。现在看来,当你在执行中定义目标时,它只在该执行中有效。 尝试将其声明为全局:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<configuration>
<files>
<file>${basedir}/my.properties</file>
</files>
</configuration>
...
答案 3 :(得分:0)
一种行之有效的方法是在顶级POM中使用该元素,该POM包含具有常见依赖项的项目。那是最简单的方法。
您还可以导入明确用于依赖性管理的POM。导入方法不需要父子项目关系。
请参阅Maven文档: