我已经将项目从Eclipse移植到Maven,我需要设置一个环境变量来使我的项目工作。
在Eclipse中,我转到“运行 - >运行配置”,然后在“环境”选项卡下,将“WSNSHELL_HOME”设置为值“conf”。
我怎么能用Maven做到这一点?
非常感谢!
答案 0 :(得分:96)
您可以在命令行上传递它,如
mvn -DmyVariable=someValue install
[更新] 请注意,参数的顺序非常重要 - 您需要在命令之前指定的任何选项。 [/ Update] < /强>
在POM文件中,您可以将系统变量(在命令行或pom中指定)称为${myVariable}
,将环境变量称为${env.myVariable}
。 (感谢评论的评论者。)
好的,所以你想把你的系统变量传递给你的测试。如果 - 我假设 - 您使用Surefire plugin进行测试,最好是在plugins
部分中指定pom中所需的系统变量,例如
<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>
答案 1 :(得分:21)
-D
属性不会可靠地从万无一失的传播到你的测试(我不知道为什么它适用于eclipse)。在命令行上使用maven时,使用argLine属性来包装您的属性。这会将它们传递给您的测试
mvn -DargLine="-DWSNSHELL_HOME=conf" test
使用System.getProperty
读取代码中的值。请查看有关System.getenv
和Sytem.getProperty
之间差异的this帖子。
答案 2 :(得分:4)
有一个名为properties-maven-plugin的maven插件,这个插件提供了设置系统变量的目标set-system-properties
。如果您有一个包含所有这些属性的文件,这将特别有用。因此,您可以读取属性文件并将其设置为系统变量。
答案 3 :(得分:2)
您可以将您的maven命令包装在bash脚本中:
#!/bin/bash
export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR
答案 4 :(得分:2)
对于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>
答案 5 :(得分:1)
另一种解决方案是在MAVEN_OPTS
(或Windows上的${user.home}/.mavenrc
)中设置%HOME%\mavenrc_pre.bat
(或其他环境变量)。
由于Maven 3.3.1有new possibilities to set mvn command line parameters,如果这是你真正想要的:
${maven.projectBasedir}/.mvn/maven.config
${maven.projectBasedir}/.mvn/jvm.config
答案 6 :(得分:1)
@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>
答案 7 :(得分:0)
在您的代码中添加:
System.getProperty("WSNSHELL_HOME")
通过maven命令修改或添加值属性:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
如果要在Eclipse中运行,请在Debug / Run配置中添加VM参数
-DWSNSHELL_HOME =您的值
您不需要修改POM
答案 8 :(得分:0)
您可以通过_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
)。
答案 9 :(得分:0)
我建议使用神奇的工具 direnv。有了它,您可以在 cd 进入项目后注入环境变量。这些步骤对我有用:
.envrc 文件
source_up
dotenv
.env 文件
_JAVA_OPTIONS="-DYourEnvHere=123"