为自定义 Maven2属性设置默认值

我有一个带有插件的 Maven pom.xml,我希望能够在命令行上控制它。除了在网上搜索了一会儿之后,我还是不知道如何为我的控件属性设置一个默认值,否则一切都很正常:

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

所以如果我让 Maven

mvn -DmyProperty=something ...

一切都很好,但我想有一个特定的值分配给我的属性也没有 -DmyProperty=...开关。这怎么可能呢?

73533 次浏览

这可能对你有用:

<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”作为默认参数

你可以使用下面的代码:

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

Taylor L 的方法很好,但你不需要额外的侧写。只需在 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.
E.g. apache-tomcat-5.5.20 -->
<cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir>
</properties>
</project>

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

您可以在 <build>/<properties>或如下所示的配置文件中定义属性默认值。当您使用 -DmyProperty=anotherValue在命令行上提供属性值时,它将覆盖 POM 中的定义。也就是说,POM 中属性值的 所有定义仅为属性设置一个 违约值。

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

@ akostadinov 的解决方案非常适合常规使用... ... 但是如果所需的属性应该在依赖解析阶段由反应器组件使用(在 mvn pom 层次结构处理的早期阶段... ...) ,你应该使用配置文件“ 没有激活”测试机制来确保可选命令行提供的值总是优先于 pom.xml 中提供的值。这就是你所谓的等级制度。

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

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

我采用了 Sal 的方法,但是把它压平了一点。

<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugin>
<configuration>
<version>LATEST</version>
</configuration>
</plugin>
</build>
</profile>
</profiles>

现在你有两个选择:

  1. 使用默认值: MVN install (所有 $version 都将替换为 LATEST)

  2. 使用自己的值: MVN install-P! Default-Dversion = 0.9(所有 $version 将为0.9)