【问题标题】:How to define conditional properties in maven?如何在maven中定义条件属性?
【发布时间】:2013-01-20 22:38:14
【问题描述】:

例如,如果有环境变量AAA,我想将属性Configuration 设置为${env:AAA},如果没有这样的环境变量,我希望设置为其他常量值。

如何在 maven 2 中做到这一点?

【问题讨论】:

  • 所以你想有条件地设置一个属性?

标签: maven maven-2


【解决方案1】:

好像你activate a profile conditionally...

<profiles>
  <profile>
    <activation>
      <property>
        <name>environment</name>
        <value>test</value>
      </property>
    </activation>
    ...
  </profile>
</profiles>

当环境变量被定义为值test 时,配置文件将被激活,如以下命令所示:

mvn ... -Denvironment=test

【讨论】:

  • 我不明白。你的意思是maven没有属性条件?如果我有 10 个属性并且我想允许通过环境覆盖每个属性,那么我应该定义多少个配置文件?
  • 取决于您的构建系统。如果这 10 个属性是互斥的,那么您似乎需要定义 10 个配置文件。但是,如果是这种情况,我建议您检查您的逻辑。
  • 并测试它是否存在:&lt;name&gt;!my.variable.which.could.be.missing&lt;/name&gt;earlyandoften.wordpress.com/2011/02/09/disable-maven-profile
  • 一个有用的替代方法是在调用 mvn 的任何地方执行此操作。例如,您的 shell 脚本可能有更多的权力来有条件地设置环境变量。这就是我在阅读此答案后最终做的事情。具体来说,我在导出环境变量的 gitlab .yml 文件中添加了几行,然后通过 -D 标志将它们传递给 mvn。
【解决方案2】:

如果系统属性不太可能被接受,您可以简单地在 POM 文件中定义该属性并在需要时覆盖:

<project>
...
  <properties>
     <foo.bar>hello</foo.bar>
  </properties>
...
</project>

您可以通过引用${foo.bar} 在 POM 的其他地方引用此属性。要在命令行上覆盖,只需传递一个新值:

mvn -Dfoo.bar=goodbye ...

【讨论】:

    【解决方案3】:

    您可以使用 maven-antrun-plugin 有条件地设置属性。示例设置install.path + 回显值:

    <plugin>
        <!-- Workaround maven not being able to set a property conditionally based on environment variable -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.8</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>run</goal>
                </goals>
                <configuration>
                    <exportAntProperties>true</exportAntProperties>
                    <target>
                        <property environment="env"/>
                        <condition property="install.path" value="${env.INSTALL_HOME}" else="C:\default-install-home">
                            <isset property="env.INSTALL_HOME" />
                        </condition>
                        <echo message="${install.path}"/>
                    </target>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    【讨论】:

    • 请注意,如果您尝试在另一个maven-antrun-plugin 中使用${install.path},它们必须具有相同的版本。
    猜你喜欢
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多