为自定义Maven 2属性设置默认值

我有一个Maven pom.xml,里面有一个我希望能够在命令行上控制的插件。 一切工作,否则罚款,除了searchnetworking之后,我无法弄清楚如何设置我的控制属性的默认值:

<plugin> ... <configuration> <param>${myProperty}</param> </configuration> ... </plugin> 

所以如果我运行Maven

 mvn -DmyProperty=something ... 

一切都很好,但我想有一个具体的值分配给myProperty也没有-DmyProperty=...开关。 如何才能做到这一点?

老问题,但我认为最简单的答案是不存在的。 您可以在<build>/<properties>或在如下所示的configuration文件中具有属性默认值。 当你在命令行上提供属性值时使用-DmyProperty=anotherValue那么它将覆盖来自POM的定义。 我希望我能解释..

 <profile> ... <properties> <myProperty>defaultValue</myProperty> </properties> ... <configuration> <param>${myProperty}</param> </configuration> ... </profile> 

泰勒的方法工作正常,但你不需要额外的configuration文件。 你可以在POM文件中声明属性值。

 <project> ... <properties> <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. Executions of the plug-in should append the container name and version to this path. Eg apache-tomcat-5.5.20 --> <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> </properties> </project> 

如果您希望每个用户都能够设置自己的默认值,则还可以在用户settings.xml文件中设置属性。 我们使用这种方法来隐藏CI服务器为常规开发人员使用的一些插件所使用的凭证。

你可以使用下面的东西:

 <profile> <id>default</id> <properties> <env>default</env> <myProperty>someValue</myProperty> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> 

akostadinov解决scheme对于常见的用法非常有用…但是如果在依赖关系parsing阶段(很早就在mvn pom层次结构处理过程中)反应器组件需要使用期望的属性,那么应该使用profile“ none activation ”testing机制来确保可选的命令行提供的值始终是关于在pom.xml中提供的值的优先级。 而这个深度就是你的pom等级。

为此,请在父pom.xml中添加这种configuration文件:

  <profiles> <profile> <id>my.property</id> <activation> <property> <name>!my.property</name> </property> </activation> <properties> <my.property>${an.other.property} or a_static_value</my.property> </properties> </profile> </profiles> 

这可能适合你:

 <profiles> <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugin> <configuration> <param>Foo</param> </configuration> </plugin> </build> ... </profile> <profile> <id>notdefault</id> ... <build> <plugin> <configuration> <param>${myProperty}</param> </configuration> </plugin> </build> ... </profile> </profiles> 

那样,

mvn clean将使用“foo”作为默认参数。 在需要重写的情况下,使用mvn -P notdefault -DmyProperty=something