如何在POM.xml中引用环境变量?

时间:2012-05-05 15:05:28

标签: java maven environment-variables pom.xml

我使用maven作为构建工具。我已经设置了一个名为env的环境变量。如何在pom.xml文件中访问此环境变量的值?

6 个答案:

答案 0 :(得分:178)

查看Maven Properties Guide ...

正如Seshagiri在评论中指出的,${env.VARIABLE_NAME}会做你想做的事。

我会添加一个警告,并说pom.xml应该完整地描述你的项目,所以请明智地使用环境变量。如果您的构建取决于您的环境,则它们更难以重现

答案 1 :(得分:22)

将环境变量直接传递给maven系统属性可能更安全。例如,在Linux上,您想要访问环境变量MY_VARIABLE。您可以在pom文件中使用系统属性。

<properties>
    ...
    <!-- Default value for my.variable can be defined here -->
    <my.variable>foo</my.variable>
    ...
</properties>
...
<!-- Use my.variable -->
... ${my.variable} ...

在maven命令行上设置属性值:

mvn clean package -Dmy.variable=$MY_VARIABLE

答案 2 :(得分:19)

另外,请确保环境变量 仅由大写字母组成 ....我不知道为什么(文档没有说什么关于它的显式,至少是@Andrew White提供的链接),但如果变量是小写字(例如env.dummy),则变量总是为空或为空...

我正在努力解决这个问题,直到我决定尝试UPPER CASE VARIABLE,问题解决了。

OK变量示例:

  • DUMMY
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

注意:我使用的是maven v3.0.5)

我希望这可以帮助别人......

答案 3 :(得分:10)

我们不能使用

<properties>
    <my.variable>${env.MY_VARIABLE}</my.variable>
</properties>

答案 4 :(得分:3)

我正在努力做同样的事情,运行一个设置变量的shell脚本,然后想要使用shared-pom中的变量。目标是让环境变量使用com.google.code.maven-replacer-plugin替换项目文件中的字符串。

使用${env.foo}${env.FOO}并不适合我。 Maven没有找到变量。有效的是将变量作为Maven中的命令行参数传递。这是设置:

  1. 在shell脚本中设置变量。如果您在子脚本中启动Maven,请确保变量已设置,例如使用source ./maven_script.sh从父脚本中调用它。

  2. 在shared-pom中,创建一个抓取环境变量的命令行参数:

  3. <plugin>
      ...
      <executions>
        <executions>
        ...
          <execution>
          ...
            <configuration>
              <param>${foo}</param> <!-- Note this is *not* ${env.foo} -->
            </configuration>
    
    1. 在com.google.code.maven-replacer-plugin中,设置替换值${foo}

    2. 在我调用maven的shell脚本中,将其添加到命令中:-Dfoo=$foo

答案 5 :(得分:2)

您可以使用<properties>标签来定义自定义变量,并使用${variable}模式来使用它

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <!-- define -->
    <properties>
        <property.name>1.0</property.name>
    </properties>

    <!-- using -->
    <version>${property.name}</version>

</project>