2012-12-25 5 views
15

Wie kann ich eine Umgebungsvariable (mit anderen Worten intern zugänglich System.getenv("APP_HOME") in einer pom-Datei auf?Wie richte ich eine Umgebungsvariable in mvn pom ein?

APP_HOME=/path/home 

Ich weiß, ich es in .profile einrichten können, aber frage mich, ob pom den gleichen Trick tun können.

Per unten bmargulies Vorschlag, ich folgenden versucht, ohne Glück

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

Antwort

1

Die documentation of the maven-surefire-plugin zeigen Beispiele und beschreibt, wie solche Dinge des Systemzustands Eigenschaften zu tun.

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

Es könnte besser sein, sie anstelle von Umgebungsvariablen zu verwenden, weil es einfacher ist, sie zu verwenden, verursachen env Variable Einrichtung benötigt werden korrekt und die cmd.exe und die Jvm muss neu gestartet werden, um sie zum Laufen zu bringen.

Es ist nicht notwendig, die beinhaltet für die Tests zu konfigurieren, führen maven-surefire-plugin hat bereits folgende Vorgaben:

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

Das OP hat nach Umgebungsvariablen gefragt, nicht nach Java-Systemeigenschaften. – bmargulies

+0

Ich weiß aber env Variablen machen mehr Probleme als Systemeigenschaften. – khmarbaise

+1

Ich denke, dass er oder sie Prozesse startet, die wirklich env vars lesen. – bmargulies

26

einige Plugins, wie todsicheren, lassen Sie sie einstellen. Es gibt keine Möglichkeit, in der Regel in der pom.

Das Dokument für todsichere ist here. Surefire wird Umgebungsvariablen für die Dauer des Tests festlegen, nicht für andere Zwecke. Und Sie müssen todsichere Gabel machen.

In der Konfiguration ...

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

Hmm .. scheint nicht zu funktionieren. Ich nehme an, ist der Name des Schlüssels? – JAM

+1

Verwenden Sie mvn -X, um zu überprüfen, was passiert. – bmargulies

+0

Haben Sie die cmd.exe vor dem Versuch neu gestartet? Rufen Sie von der Befehlszeile oder von Eclipse an? – khmarbaise