2012-12-25 9 views
15

Jak mogę ustawić zmienną środowiskową (innymi słowy wewnętrznie dostępnego przez System.getenv("APP_HOME") w pliku pom?Jak ustawić zmienną środowiskową w mvn pom?

APP_HOME=/path/home 

Zdaję sobie sprawę, mogę ustawić go w .profile, ale zastanawiam się, czy pom może zrobić taką samą sztuczkę.

za sugestią bmargulies męska poniżej próbowałem następujących bez powodzenia

<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> 

Odpowiedz

1

W documentation of the maven-surefire-plugin pokazują przykłady i opisuje, jak robić takie rzeczy konfigurowania właściwości systemu.

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

To może być lepiej używać ich zamiast zmiennej środowiskowej, bo to prostsze do korzystania z nich, bo env zmiennej potrzebne do prawidłowej konfiguracji i cmd.exe i JVM musi zostać uruchomiony ponownie, aby je pracy.

Nie jest konieczne, aby skonfigurować obejmuje do testów, bo maven-surefire-plugin już ma następujące ustawienia domyślne:

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

OP poprosił o env vars, a nie o właściwości systemu Java. – bmargulies

+0

Wiem, ale zmienne env sprawiają więcej problemów niż właściwości systemu. – khmarbaise

+1

Sądzę, że on lub ona uruchamia procesy, które naprawdę czytają env vars. – bmargulies

26

Niektóre wtyczki, jak murowany, niech je ustawić. nie ma sposobu, w ogóle, w pom.

Dokumentem do sprawdzenia jest plik here. Surefire ustawi zmienne środowiskowe na czas trwania testów, a nie na nic innego. I musisz zrobić rozgałęzienie surefire.

W konfiguracji ...

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

Hmm .. nie wydają się działać. Zakładam, że to nazwa klucza? – JAM

+1

Użyj mvn -X, aby sprawdzić, co się dzieje. – bmargulies

+0

Czy uruchomiłeś ponownie program cmd.exe, zanim spróbujesz tego? Czy dzwonisz z wiersza poleceń lub z Eclipse? – khmarbaise