James Raitsev
James Raitsev

Reputation: 96391

How to set up an environment variable in mvn pom?

How can i set up an environment variable (in other words internally accessible by System.getenv("APP_HOME") in a pom file?

APP_HOME=/path/home

I realize i can set it up in .profile, but wonder if pom can do the same trick.

Per bmargulies's suggestion below, i tried the following, without luck

<build>
    <finalName>KvpStore</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12.4</version>
            <configuration>
                <includes>
                    <include>**/*Test*.java</include>
                </includes>
                <environmentVariables>
                    <APP_NAME>blah_blah</APP_NAME>  <------------------------
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

Upvotes: 34

Views: 93666

Answers (2)

bmargulies
bmargulies

Reputation: 100013

Some plugins, like surefire, let you set them. There's no way, in general, in the pom.

The doc for surefire is is here. Surefire will set environment variables for the duration of the run of the tests, not for anything else. And you have to make surefire fork.

In the configuration ...

<configuration>
  <forkMode>always</forkMode>
  <environmentVariables>
     <var1>val1</var1>
  </environmentVariables>
</configuration>

Upvotes: 59

khmarbaise
khmarbaise

Reputation: 97359

The documentation of the maven-surefire-plugin show examples and describes how to do such things of setting up system properties.

<configuration>
  <systemPropertyVariables>
    <propertyName>propertyValue</propertyName>
    <buildDirectory>${project.build.directory}</buildDirectory>
    [...]
  </systemPropertyVariables>
</configuration>

It might be better to use them instead of environment variable, cause it's simpler to use them, cause env variable needed to setup correctly and the cmd.exe and the jvm must be restarted to get them working.

It is not necessary to configure the includes for the tests, cause maven-surefire-plugin has already the following defaults:

<includes>
 <include>**/Test*.java</include>
 <include>**/*Test.java</include>
 <include>**/*TestCase.java</include>
</includes>

Upvotes: -8

Related Questions