Java 带Maven的环境变量
我已经将一个项目从Eclipse移植到Maven,我需要设置一个环境变量使我的项目工作 在Eclipse中,我转到“运行->运行配置”,在“环境”选项卡下,我将“WSNSHELL\u HOME”设置为值“conf” 我怎样才能和Maven一起做到这一点Java 带Maven的环境变量,java,maven,environment-variables,Java,Maven,Environment Variables,我已经将一个项目从Eclipse移植到Maven,我需要设置一个环境变量使我的项目工作 在Eclipse中,我转到“运行->运行配置”,在“环境”选项卡下,我将“WSNSHELL\u HOME”设置为值“conf” 我怎样才能和Maven一起做到这一点 多谢各位 您可以在命令行上传递它,如下所示 mvn -DmyVariable=someValue install [Update]请注意,参数的顺序很重要-您需要在命令之前指定任何选项。[/Update] 在POM文件中,可以将系统变量(在命令
多谢各位 您可以在命令行上传递它,如下所示
mvn -DmyVariable=someValue install
[Update]请注意,参数的顺序很重要-您需要在命令之前指定任何选项。[/Update]
在POM文件中,可以将系统变量(在命令行或POM中指定)引用为${myVariable}
,将环境变量引用为${env.myVariable}
。(感谢评论人士的更正。)
更新2
好的,那么您希望将系统变量传递给测试。如果-我假设-您使用用于测试,最好是在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>
...
org.apache.maven.plugins
maven surefire插件
...
...
形态
...
从surefire插件到您的测试,-D
属性将无法可靠地传播(我不知道它为什么与eclipse一起工作)。在命令行上使用maven时,请使用属性包装属性。这将通过你的测试
mvn -DargLine="-DWSNSHELL_HOME=conf" test
使用System.getProperty
读取代码中的值。查看一下关于System.getenv
和Sytem.getProperty
之间区别的帖子。有一个名为this one的maven插件提供了一个设置系统变量的目标set System properties
。如果您有一个包含所有这些属性的文件,这将特别有用。因此,您可以读取属性文件并将其设置为系统变量。另一种解决方案是在${user.home}/.mavenrc
(或windows上的%home%\mavenrc\u pre.bat
中设置MAVEN\u选项(或其他环境变量)
由于Maven 3.3.1有,如果这是您真正想要的:
${maven.projectBasedir}/.mvn/maven.config
${maven.projectBasedir}/.mvn/jvm.config
您可以将maven命令包装在bash脚本中:
#!/bin/bash
export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR
对于Maven中的环境变量,可以设置如下
org.apache.maven.plugins
maven故障保护插件
...
...
形态
在代码中添加:
System.getProperty(“WSNSHELL\u HOME”)
通过maven命令修改或添加值属性:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
如果您想在Eclipse中运行它,请在调试/运行配置中添加VM参数
- 转到运行->运行配置
- 选择选项卡参数
- 附加模块节VM参数
-DWSNSHELL_HOME=您的价值
您无需修改@Kevin答案中的POM以下文档。下面的文档为我使用maven sure fire插件设置环境变量提供了帮助
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<environmentVariables>
<WSNSHELL_HOME>conf</WSNSHELL_HOME>
</environmentVariables>
</configuration>
org.apache.maven.plugins
maven surefire插件
形态
您可以通过\u JAVA\u 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
(它会自动选择\u JAVA\u选项
)。我建议使用这个神奇的工具。使用它,您可以在将cd插入项目后注入环境变量。这些步骤对我很有效:
.envrc文件
source_up
dotenv
.env文件
_JAVA_OPTIONS="-DYourEnvHere=123"
我需要启动“mvn测试”,它似乎不起作用,因为如果我编写mvn测试-DWSNSHELL_HOME=conf,我仍然会得到异常java.io.FileNotFoundException:null/wsnshell.conf(没有这样的文件或目录)@Janky,换个方式试试,也就是说,mvn-DWSNSHELL_HOME=conf测试
.nope…:(我仍然得到java.io.FileNotFoundException:null/wsnshell.conf(没有这样的文件或目录)…在代码中,我以这种方式读取变量..System.getenv(“wsnshell\u HOME”)
正确吗?@Janky,等一下,你是直接从Maven版本运行应用程序,还是…?你们两个把环境变量和系统属性混淆了。命令-D选项只设置系统属性。我建议让你的项目在不使用环境变量的情况下运行。然后转到Maven。没有理由跳过该选项如果环境变量对您的系统有用,并且我确信我的解决方案是有效的(我自己使用)。请参阅我的提示重构'system.getenv'/'system.getProperty'。您应该使用system.getProperty(“WSNSHELL\u HOME”)阅读该属性在花了很多时间尝试其他东西之后,我没有使用System.getenv.Perfect,而是使用了这个。如果您在pom.xml中为surefire插件配置了argLine参数,那么添加${argLine}
占位符,否则将不会拾取命令行中的参数。示例:-Duser.timezone=UTC${argLine}
这对我来说很有效,谢谢!这是一个为maven测试配置sys props的好工具。乍一看,它仍然很混乱,为什么它不能直接使用它们,但需要一个额外的参数。令人难以置信的是,这是唯一一个使用Surefire插件对我完全有效的方法。在我在POM中设置的大约10个环境变量中,t测试运行时没有看到其中两个。即使我在shell中设置了它们,然后在mvn安装中设置了它们,它们仍然以某种方式被隐藏。但是,如果我从shell脚本运行,它工作得很好!我希望我理解为什么会发生这种情况。我相信这应该是一个公认的答案,因为这是最简单的解决方案
_JAVA_OPTIONS="-DYourEnvHere=123"