使用Maven的环境变量

Gia*_*uca 74 java environment-variables maven

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

在Eclipse中,我转到"运行 - >运行配置",在"环境"选项卡下,我将"WSNSHELL_HOME"设置为值"conf".

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

非常感谢你!

Pét*_*rök 110

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

mvn -DmyVariable=someValue install
Run Code Online (Sandbox Code Playgroud)

[更新]请注意,参数的顺序很重要 - 您需要在命令之前指定任何选项.[/更新]

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

UPDATE2

好的,所以你想把你的系统变量传递给你的测试.如果 - 正如我所假设的 - 你使用Surefire插件进行测试,最好的是在你的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>
Run Code Online (Sandbox Code Playgroud)

  • 你们两个将环境变量与系统属性混淆.-D命令选项仅设置"系统属性". (31认同)
  • @Janky,反过来尝试,即`mvn -DWSNSHELL_HOME = conf test`. (2认同)

FrV*_*aBe 23

这些-D属性不会可靠地从万无一失的传播到你的测试(我不知道为什么它适用于eclipse).在命令行上使用maven时,使用argLine属性来包装您的属性.这会将它们传递给您进行测试

mvn -DargLine="-DWSNSHELL_HOME=conf" test
Run Code Online (Sandbox Code Playgroud)

使用System.getProperty读取你的代码的值.看看到这个职位有关的差异System.getenvSytem.getProperty.

  • 您应该使用System.getProperty("WSNSHELL_HOME")而不是使用System.getenv来读取该属性. (2认同)

小智 8

对于 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 #环境变量

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    ...
    <configuration>
        <includes>
            ...
        </includes>
        <environmentVariables>
            <WSNSHELL_HOME>conf</WSNSHELL_HOME>
        </environmentVariables>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)


Ren*_*ené 7

另一种解决方案是在(或在 Windows 上)设置MAVEN_OPTS(或其他环境变量) 。${user.home}/.mavenrc%HOME%\\mavenrc_pre.bat

\n\n

从 Maven 3.3.1 开始,有新的可能性来设置 mvn 命令行参数,如果这是你真正想要的:

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


mod*_*e13 5

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

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR
Run Code Online (Sandbox Code Playgroud)