【问题标题】:How to set default values for missing environment variables in maven pom如何在 maven pom 中为缺少的环境变量设置默认值
【发布时间】:2016-07-25 14:21:21
【问题描述】:

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


上下文:

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

如果在操作系统中设置了环境变量,则运行 maven(编辑:不像 mvn ... -DENVIRONMENT_PROPERTY=some_value)会使其解析具有给定值的属性占位符。但如果环境变量不存在,则值为空。

问题:

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

重要:

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

【问题讨论】:

  • 首先这些环境变量有什么用途?这使您的构建环境依赖..?
  • 我们正在过渡到使用环境变量的 Docker 进行部署。但是对于本地开发,我们还没有完全做到这一点,并且常规的 maven 构建在那里更加灵活。
  • 嗯..如果您使用 Docker 进行部署,那么构建应该为所有环境生成所有工件?

标签: maven environment-variables default-value setter


【解决方案1】:

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

${env:ENVIRONMENT_PROPERTY:-default value}

这将采用 ENVIRONMENT_PROPERTY 中的值,如果未设置,它将采用“默认值”。


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

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

其中dollar 是一个maven 属性,它被解析为一个美元符号(<dollar>$</dollar>),当与{ 括号结合使用时,它变成一个分隔符。

【讨论】:

  • 它也不起作用。展示你如何使用org.apache.felix.fileinstall。因为${dollar}{env:ENVIRONMENT_PROPERTY:-${default.value}} 从未存在过。
【解决方案2】:

您可以定义一个具有默认值的属性。

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

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

【讨论】:

    【解决方案3】:

    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

    【讨论】:

    • 谢谢,您共享的属性的优先级帮助了我。我必须使用特定于环境的过滤器值-${env}.properties。我还必须支持日常构建的正常构建命令 without -Denv=dev 过滤器,就像我之前做的那样。我最终将默认值设置为 pom.xml 本身的属性。只有当我需要其他值时,我才通过命令行提供它。
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多