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

Joh*_*ell 39 maven-3 maven

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

例如,该文件包含PROPERTY = $ {VALUE}

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

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

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

从我的测试来看,它默认是相反的,因为在pom中设置的属性将覆盖环境变量以用于资源过滤.

谢谢

Cha*_*suk 44

我正在使用配置文件来确定

<profiles>
  <profile>
    <activation>
      <activeByDefault>true</activeByDefault>
      <property>
        <name>!myproperty</name>
      </property>
    </activation>
    ...
    <properties>
       <myproperty>some value</myproperty>
    </properties>
  </profile>
  ...
</profiles>
Run Code Online (Sandbox Code Playgroud)

请注意

  1. activeByDefault设置为true的目的,在默认情况下启用它.
  2. !myproperty意味着该属性缺失或不存在.
  3. 如果myproperty不存在,只需使用相应的myproperty定义properties.

您可以在http://maven.apache.org/guides/introduction/introduction-to-profiles.html上看到更多信息.

我希望这可能有助于实现您的要求.

问候,

Charlee Ch.

  • 非常感谢你的评论.我删除了<activeByDefault> true </ activeByDefault>,以便它只根据属性值激活,然后我将其更改为<name>!env.myproperty </ name>,这样就可以获取环境变量.但现在它完美无缺.非常感谢你的帮助. (8认同)
  • 不幸的是,当您明确调用其他配置文件时,此方法不起作用.在这种情况下,不会触发隐式配置文件调用... (6认同)
  • 如果我想为多个变量设置默认值怎么办?我试过重复 &lt;name&gt; 标签,但没有用 (2认同)

Ali*_*aka 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>
Run Code Online (Sandbox Code Playgroud)