Environment Variable with Maven

前端 未结 9 2063
攒了一身酷
攒了一身酷 2020-11-28 03:24

I\'ve ported a project from Eclipse to Maven and I need to set an environment variable to make my project work.

In Eclipse, I go to \"Run -> Run configurations\" and

相关标签:
9条回答
  • 2020-11-28 03:45

    For environment variable in Maven, you can set below.

    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>
    
    0 讨论(0)
  • 2020-11-28 03:47

    There is a maven plugin called properties-maven-plugin this one provides a goal set-system-properties to set system variables. This is especially useful if you have a file containing all these properties. So you're able to read a property file and set them as system variable.

    0 讨论(0)
  • 2020-11-28 03:51

    You can pass some of the arguments through the _JAVA_OPTIONS variable.

    For example, define a variable for maven proxy flags like this:

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

    And then use mvn clean install (it will automatically pick up _JAVA_OPTIONS).

    0 讨论(0)
  • 2020-11-28 03:52

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

    Since Maven 3.3.1 there are new possibilities to set mvn command line parameters, if this is what you actually want:

    • ${maven.projectBasedir}/.mvn/maven.config
    • ${maven.projectBasedir}/.mvn/jvm.config
    0 讨论(0)
  • 2020-11-28 03:56

    You can just pass it on the command line, as

    mvn -DmyVariable=someValue install
    

    [Update] Note that the order of parameters is significant - you need to specify any options before the command(s).[/Update]

    Within the POM file, you may refer to system variables (specified on the command line, or in the pom) as ${myVariable}, and environment variables as ${env.myVariable}. (Thanks to commenters for the correction.)

    Update2

    OK, so you want to pass your system variable to your tests. If - as I assume - you use the Surefire plugin for testing, the best is to specify the needed system variable(s) within the pom, in your plugins section, e.g.

    <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>
    
    0 讨论(0)
  • 2020-11-28 03:59

    The -D properties will not be reliable propagated from the surefire-pluging to your test (I do not know why it works with eclipse). When using maven on the command line use the argLine property to wrap your property. This will pass them to your test

    mvn -DargLine="-DWSNSHELL_HOME=conf" test
    

    Use System.getProperty to read the value in your code. Have a look to this post about the difference of System.getenv and Sytem.getProperty.

    0 讨论(0)
提交回复
热议问题