2016-04-12 5 views
2

Hier ist meine pom.xml-Datei:Satz systemProperty in exec-Maven-Plugin funktioniert nicht

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <profiles> 
     <profile> 
      <id>my_proj</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.codehaus.mojo</groupId> 
         <artifactId>exec-maven-plugin</artifactId> 
         <version>1.4.0</version> 
         <executions> 
          <execution> 
           <phase>install</phase> 
           <goals> 
            <goal>exec</goal> 
           </goals> 
          </execution> 
         </executions> 
         <configuration> 

          <executable>java</executable> 
          <arguments> 
           <argument>-classpath</argument> 
           <classpath /> 
           <argument>com.test.Main</argument> 

          </arguments> 
          <systemProperties> 
           <systemProperty> 
            <key>someKey</key> 
            <value>someValue</value> 
           </systemProperty> 
          </systemProperties> 
          <environmentVariables> 
           <someKey> 
            someValue 
           </someKey> 
          </environmentVariables> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 

     </profile> 
    </profiles> 

</project> 

und in Main.java

public static void main(String[] args) { 

    System.out.println("hello world" + System.getenv("someKey") + " " + System.getProperty("someKey")); 
} 

der Ausgang, wenn ich laufen

mvn install -Pmy_proj 

ist

hello worldsomeValue null 

Ich kann nicht scheinen, den SystemProperty-Wert zu erhalten. Was habe ich falsch gemacht ?

Antwort

6

Die systemProperty funktioniert nicht einfach, weil es kein erwartetes Element der exec Ziel der exec-maven-plugin ist.

Überprüfen Sie die offizielle exec goal page, keine systemProperties Element ist angegeben. Daher ist Ihre Konfiguration für Maven immer noch gültig, weil es sich um wohlgeformtes XML handelt, das jedoch von der exec-maven-plugin ignoriert wird.

Von offiziellen Maven Pom Reference über das Plugin configuration Element:

Es kann gut sein, zu beachten, dass alle Konfigurationselemente, egal wo sie innerhalb des POM sind, sollen Werte an eine andere zugrunde liegende System zu übergeben, wie ein Plugin. Mit anderen Worten: Werte innerhalb eines Konfigurationselements werden vom POM-Schema niemals explizit benötigt, aber ein Plugin-Ziel hat das Recht, Konfigurationswerte zu verlangen.


Sie machen eine Verwechslung mit dem systemProperties Eintrag Konfiguration durch seine java Ziel vorgesehen. Diese Option ist dort wegen ihres Kontexts verfügbar: Sie ist für Java-Ausführungen vorgesehen. Auf der anderen Seite ist das Ziel exec viel allgemeiner und als solches kann eine Option, die nur von Java-Programmen benötigt wird, nicht vorhersehen.

Um die Systemeigenschaften zu einer Java-Ausführung über das exec Ziel passieren, können Sie den arguments Konfigurationseintrag verwenden und den Wert -D notation

-Dproperty=value Legt eine Systemeigenschaft verwenden.

Ferner ist zu beachten, gemäß offiziellen Running Java programs with the exec goal Dokumentation, die -D Argumente zuerst gehen sollte:

<configuration> 
    <executable>java</executable> 
    <arguments> 
     <argument>-DsomeKey2=someValue2</argument> 
     <argument>-classpath</argument> 
     <classpath /> 
     <argument>com.test.Main</argument> 
    </arguments> 
    <environmentVariables> 
     <someKey>someValue</someKey> 
    </environmentVariables> 
</configuration> 

Außerdem sollten Sie nicht die gleichen Variablennamen für Umwelt gesetzt und als Systemeigenschaft, würde die Systemeigenschaft nicht anders festgelegt werden.

+0

Danke, es funktioniert jetzt. Ich habe den Kommentar bearbeitet und deine Antwort als korrekt markiert –