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

时间:2009-05-22 18:24:08

标签: maven-2 properties

我有一个带有插件的Maven pom.xml,我希望能够在命令行上控制它。一切都运行得很好,除非搜索网络一段时间后我无法弄清楚如何设置我的控件属性的默认值:

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

所以如果我用

运行Maven
mvn -DmyProperty=something ...

一切都很好,但我想在没有-DmyProperty=...开关的情况下为myProperty分配一个特定的值。怎么办呢?

6 个答案:

答案 0 :(得分:59)

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

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

答案 1 :(得分:36)

泰勒的方法很好,但你不需要额外的档案。您只需在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>

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

答案 2 :(得分:26)

您可以使用以下内容:

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

答案 3 :(得分:4)

@ akostadinov的解决方案非常适合常用...但是如果在依赖解析阶段(mvn pom层次结构处理的早期阶段......)中反应堆组件将使用所需的属性,则应使用配置文件“ none激活“测试机制,以确保可选命令行提供的值始终优先于pom.xml中提供的值。而这就是你的pom层次结构。

为此,请在父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>

答案 4 :(得分:1)

这可能对您有用:

<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

答案 5 :(得分:0)

我采用了sal的方法,但将其弄平了。

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

现在您有2个选择:

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

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