我正在使用资源过滤来替换属性文件中的一些$ {values}。
e.g。该文件包含 PROPERTY = $ {VALUE}
我希望将$ {VALUE}替换为环境变量$ VALUE,如果在构建运行时设置了$ VALUE,则效果很好。真棒。
但是,这些env变量只在我们的官方构建环境(由Jenkins)中设置,而不是在开发人员构建中,因此$ {values}会在过滤后留在属性文件中,这可能会破坏内容。我宁愿不要求在开发人员环境中使用env vars,因为这总是会导致脆弱的开发构建和狡猾的开发人员。
如果设置了环境变量值,如果未设置env var,如何使用其他默认属性值?
从我的测试中,默认情况下它的工作方式相反,因为在pom中设置的属性将覆盖环境变量以进行资源过滤。
由于
答案 0 :(得分:43)
我正在使用个人资料来确定为
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
<property>
<name>!myproperty</name>
</property>
</activation>
...
<properties>
<myproperty>some value</myproperty>
</properties>
</profile>
...
</profiles>
请注意
activeByDefault
设置为true,默认情况下启用它。!myproperty
表示此属性缺失或不存在。myproperty
不存在,只需使用myproperty
中定义的properties
代替。您可以在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>