使用Maven的环境变量

时间:2011-04-01 08:11:52

标签: java maven environment-variables

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

在Eclipse中,我转到“运行 - >运行配置”,然后在“环境”选项卡下,将“WSNSHELL_HOME”设置为值“conf”。

我怎么能用Maven做到这一点?

非常感谢!

10 个答案:

答案 0 :(得分:96)

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

mvn -DmyVariable=someValue install

[更新] 请注意,参数的顺序非常重要 - 您需要在命令之前指定的任何选项。 [/ Update] < /强>

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

UPDATE2

好的,所以你想把你的系统变量传递给你的测试。如果 - 我假设 - 您使用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.getenvSytem.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参数

  • 转到运行->运行配置
  • 选择选项卡参数
  • 在“ VM参数”部分添加
  

-DWSNSHELL_HOME =您的值

See image example

您不需要修改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"