如果没有为maven中的资源过滤设置环境变量,我该如何使用默认值?

时间:2011-06-30 01:15:19

标签: maven maven-3

我正在使用资源过滤来替换属性文件中的一些$ {values}。

e.g。该文件包含 PROPERTY = $ {VALUE}

我希望将$ {VALUE}替换为环境变量$ VALUE,如果在构建运行时设置了$ VALUE,则效果很好。真棒。

但是,这些env变量只在我们的官方构建环境(由Jenkins)中设置,而不是在开发人员构建中,因此$ {values}会在过滤后留在属性文件中,这可能会破坏内容。我宁愿不要求在开发人员环境中使用env vars,因为这总是会导致脆弱的开发构建和狡猾的开发人员。

如果设置了环境变量值,如果未设置env var,如何使用其他默认属性值?

从我的测试中,默认情况下它的工作方式相反,因为在pom中设置的属性将覆盖环境变量以进行资源过滤。

由于

2 个答案:

答案 0 :(得分:43)

我正在使用个人资料来确定为

<profiles>
  <profile>
    <activation>
      <activeByDefault>true</activeByDefault>
      <property>
        <name>!myproperty</name>
      </property>
    </activation>
    ...
    <properties>
       <myproperty>some value</myproperty>
    </properties>
  </profile>
  ...
</profiles>

请注意

  1. activeByDefault设置为true,默认情况下启用它。
  2. !myproperty表示此属性缺失或不存在。
  3. 如果myproperty不存在,只需使用myproperty中定义的properties代替。
  4. 您可以在http://maven.apache.org/guides/introduction/introduction-to-profiles.html

    看到更多信息

    我希望这可能有助于达到你的要求。

    此致

    Charlee Ch。

答案 1 :(得分:5)

在使用环境值表示文件系统路径时,在我们的开发组中遇到同样的问题 - 特别是linux和windows之间的区别。

基于同一问题的其他解决方案:

<profile>
    <id>MY_VAR default value</id>
    <activation>
        <property>
            <name>!env.MY_VAR</name>
        </property>
    </activation>
    <properties>
        <env.MY_VAR>default value</env.MY_VAR>
    </properties>
</profile>