Environment Variable with Maven

我已经将一个项目从 Eclipse 移植到了 Maven,我需要设置一个环境变量来使我的项目工作。

在 Eclipse 中,我转到“ Run-> Run configuration”,并在选项卡“ Environment”下将“ WSNSHELL _ HOME”设置为值“ conf”。

我怎样才能做到这一点与 Maven

299859 次浏览

您可以在命令行上传递它,如

mvn -DmyVariable=someValue install

[ Update ] 注意,参数的顺序很重要-您需要指定任何选项 before命令。 < strong > [/Update ]

在 POM 文件中,可以将系统变量(在命令行中或在 POM 中指定)称为 ${myVariable},将环境变量称为 ${env.myVariable}(感谢评论者的更正。)

更新2

好的,您需要将系统变量传递给测试。如果——正如我假设的那样——您使用 肯定是插件进行测试,那么最好的方法是在 pom 中的 plugins部分中指定所需的系统变量,例如。

<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
...
<configuration>
...
<systemPropertyVariables>
<WSNSHELL_HOME>conf</WSNSHELL_HOME>
</systemPropertyVariables>
</configuration>
</plugin>
...
</plugins>
</build>

-D属性将不能可靠地从 sure-pluging 传播到您的测试(我不知道为什么它与 eclipse 一起工作)。在命令行上使用 maven 时,请使用 ArgLine属性来包装属性。这会让他们通过你的测试

mvn -DargLine="-DWSNSHELL_HOME=conf" test

使用 System.getProperty读取代码中的值。看看关于 System.getenvSytem.getProperty的差异的 这个后。

有一个专业的插件称为 Properties-maven-plugin这一个提供了一个目标 set-system-properties设置系统变量。如果您有一个包含所有这些属性的文件,那么这一点特别有用。因此,您可以读取一个属性文件并将它们设置为系统变量。

Another solution would be to set MAVEN_OPTS (or other environment variables) in ${user.home}/.mavenrc (or %HOME%\mavenrc_pre.bat on windows).

因为 Maven3.3.1有 设置 mvn 命令行参数的新可能性,如果这是你真正想要的:

  • ${maven.projectBasedir}/.mvn/maven.config
  • ${maven.projectBasedir}/.mvn/jvm.config

您可以将 maven 命令包装在 bash 脚本中:

#!/bin/bash


export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

对于 Maven 中的环境变量,可以设置如下。

Http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentvariables Http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#environmentvariables

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
...
<configuration>
<includes>
...
</includes>
<environmentVariables>
<WSNSHELL_HOME>conf</WSNSHELL_HOME>
</environmentVariables>
</configuration>
</plugin>

in your code add:

System.getProperty("WSNSHELL_HOME")

修改或添加 maven 命令的 value 属性:

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

如果希望在 Eclipse 中运行它,请在 Debug/Run 配置中添加 VM 参数

  • 转到 Run-> Run configuration
  • 选择 Tab 参数
  • 添加 VM 参数部分

-DWSNSHELL_HOME=yourvalue

See image example

您不需要修改 POM

下面的文档来自于@Kevin 的回答,它帮助我设置了 maven sure-fire 插件的环境变量

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<environmentVariables>
<WSNSHELL_HOME>conf</WSNSHELL_HOME>
</environmentVariables>
</configuration>
</plugin>

您可以通过 _JAVA_OPTIONS变量传递一些参数。

例如,为 maven 代理标志定义一个变量,如下所示:

_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"

然后使用 mvn clean install(它会自动拾取 _JAVA_OPTIONS)。

我建议使用神奇的工具 Direnv。使用它,您可以在 cd 到项目中时注入环境变量。这些步骤对我很有效:

.envrc file

source_up
dotenv

. env 文件

_JAVA_OPTIONS="-DYourEnvHere=123"

由于有人可能会在这里改变他的全局 Java 选项,我想说定义 选项是一个坏主意。取而代之的是定义 MAVEN _ OPTS环境变量,它仍然会被 Maven 自动拾取,但不会像 _ JAVA _ OPTS 那样覆盖所有内容(例如 IDE vm 选项)。

MAVEN_OPTS="-DmyVariable=someValue"