代码之家  ›  专栏  ›  技术社区  ›  Eemeli Kantola

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

  •  57
  • Eemeli Kantola  · 技术社区  · 15 年前

    我有一个maven pom.xml,其中有一个插件,我希望能够在命令行上控制它。一切正常,除非在搜索了网络A之后,我无法确定如何为我的控件属性设置默认值:

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

    所以如果我和马文一起跑

    mvn -DmyProperty=something ...
    

    一切都很好,但我想给我的财产分配一个特定的值,也没有 -DmyProperty=... 开关。怎么能做到?

    5 回复  |  直到 5 年前
        1
  •  56
  •   akostadinov    10 年前

    但我认为最简单的答案不在这里。可以在中定义属性默认值 <build>/<properties> 或者在如下所示的配置文件中。在命令行上提供属性值时, -DmyProperty=anotherValue 然后它将覆盖来自POM的定义。我希望我能解释一下……

    <profile>
        ...
        <properties>
            <myProperty>defaultValue</myProperty>            
        </properties>
        ...
           <configuration>
              <param>${myProperty}</param>
           </configuration>
        ...
    </profile>
    
        2
  •  34
  •   antak Jason    7 年前

    泰勒的方法很好,但你不需要额外的资料。您可以在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服务器用于常规开发人员的某些插件的凭据。

        3
  •  26
  •   Taylor Leese    15 年前

    您可以使用如下内容:

    <profile>
        <id>default</id>
        <properties>
            <env>default</env>
            <myProperty>someValue</myProperty>            
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    
        4
  •  4
  •   Gray droiddeveloper    5 年前

    @Akostadinov的解决方案非常适用于普通用途…但是,如果反应堆组件在依赖解析阶段(在MVN POM层次结构处理的早期)应使用所需的属性,则应使用profile。” 非激活 “测试机制,以确保可选的命令行提供的值始终优先于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>
    
        5
  •  1
  •   djangofan    11 年前

    这可能对您有用:

    <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