如何在maven pom中为缺少的环境变量设置默认值

How to set default values for missing environment variables in maven pom

是否可以让 maven 为缺少的环境变量提供默认值?如果可以,怎么做?


上下文:

我有带有环境变量占位符的属性文件,如下所示:my.property=${env:ENVIRONMENT_PROPERTY}

运行 maven(编辑:不像这样mvn ... -DENVIRONMENT_PROPERTY=some_value)如果在OS中设置了环境变量,则它会使用给定值解析属性占位符.但是如果环境变量不存在,则值为空。

问题:

我希望环境变量有默认值。如果环境变量不存在,则应为其指定一个默认值,该值将在 pom 或某些属性文件或其他文件中指定。

重要:

属性 占位符必须指向一个 environment 变量。

maven 资源插件是你的朋友。它应该已经 运行 作为您构建的一部分。但它默认不过滤资源。您必须配置:

  <resource>
     <directory>src/main/resources</directory>
     <filtering>true</filtering>
  </resource>

然后配置过滤器:

<build>
   ...
   <filters>
      <filter>my-filter-values.properties</filter>
   </filters>

将您想要的默认值放入该文件。 给定 maven 中属性的优先级:

(1) 命令行 (2) settings.xml (3) pom.xml (4) 过滤器

过滤器文件中的属性可以作为您想要的默认值。

关于过滤器的正确解释,请查阅官方文档:maven-resources-plugin下的过滤器! (是here

我使用了 felix fileinstall 插件 (org.apache.felix.fileinstall) 这允许使用以下符号:

${env:ENVIRONMENT_PROPERTY:-default value}

这将从 ENVIRONMENT_PROPERTY 中获取值,如果未设置,则需要 "default value"。


编辑:
如果你想从 maven 属性中获取默认值,你需要使用 ${dollar} hack:

${dollar}{env:ENVIRONMENT_PROPERTY:-${default.value}}

其中 dollar 是一个解析为美元符号 (<dollar>$</dollar>) 的 Maven 属性,当与 { 括号组合时,它变成一个定界符。

您可以使用默认值定义 属性。

<your_property default-value="Undefined">${env.environent_variable_name}</your_property>

就是这样!
如果你定义 environent_variable_name 那么 your_property 将等于它;否则,your_property 将等于 Undefined