198

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

4

6 回答 6

243

查看Maven 属性指南...

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

我将添加一句警告并说pom.xml应该完全描述您的项目,因此请明智地使用环境变量。如果你让你的构建依赖于你的环境,它们就更难复制

于 2012-05-05T15:11:32.433 回答
37

直接将环境变量传递给 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
于 2015-09-16T23:17:40.450 回答
26

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

我为此苦苦挣扎了一个小时,直到我决定尝试一个大写变量,并且问题解决了。

OK 变量示例:

  • 假的
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

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

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

于 2014-09-09T00:16:32.450 回答
16

我们不能用

<properties>
    <my.variable>${env.MY_VARIABLE}</my.variable>
</properties>
于 2016-01-30T23:53:37.963 回答
4

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

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

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

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

<插件>
  ...
  <执行>
    <执行>
    ...
      <执行>
      ...
        <配置>
          <param>${foo}</param> <!-- 注意这不是* ${env.foo} -->
        </配置>
  1. 在 com.google.code.maven-replacer-plugin 中,设置替换值${foo}

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

于 2016-02-25T13:16:30.100 回答
4

您可以使用<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>
于 2020-04-22T14:07:18.630 回答