2016-04-12 28 views
2

İşte benim pom.xml dosyasıdır: Ben çalıştırdığınızda Main.javaseti systemProperty çalışmıyor

public static void main(String[] args) { 

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

çıkış

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

ve

mvn install -Pmy_proj 

,

is
hello worldsomeValue null 

SystemProperty değerini göremiyorum. Neyi yanlış yaptım ?

cevap

6

exec-maven-plugin'un exec hedefinin beklenen bir öğesi olmadığından, systemProperty yalnızca çalışmaz.

Resmi exec goal page, systemProperties öğesinin belirtildi belirtildi. Bu nedenle, yapılandırmanız hala Maven için geçerli olduğundan iyi biçimlendirilmiş XML olduğu için, ancak exec-maven-plugin tarafından yok sayılır. eklenti configuration elemanı ilişkin resmi Maven Pom Reference itibaren

:

Onlar POM içinde olurlarsa olsunlar tüm yapılandırma öğeleri, böyle bir şekilde, altta yatan başka bir sisteme değer geçirmek için tasarlanmıştır unutmayın iyi olabilir Eklenti. Diğer bir deyişle, bir konfigürasyon elemanı içindeki değerler POM şeması tarafından kesinlikle istenmez, ancak bir eklenti hedefi, yapılandırma değerleri gerektirme hakkına sahiptir.


Bunu java gol öngördüğü systemProperties yapılandırma girişi ile karışıklığa yapıyoruz. Bu seçenek, içeriğinden dolayı kullanılabilir: java yürütmeleri için hazırlanmış. Diğer yandan, exec hedefi çok daha genel ve bu nedenle sadece java programları için gerekli bir seçenek öngöremez.

exec hedef üzerinden bir Java yürütmeye sistem özellikleri geçirmek için, arguments yapılandırma girişini kullanmak ve -D notation

-Dproperty=value bir sistem özellik değerini ayarlar kullanabilirsiniz.

ayrıntılı not, resmi Running Java programs with the exec goal belgelendirmesi olarak, -D argümanlar ilk gitmeli: Üstelik

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

, çevre için ve sistem özelliğiyle aynı değişken adını ayarlamak gerekir, sistem özelliği olur Aksi halde ayarlanamaz.

+0

Teşekkürler şimdi çalışıyor. Yorumu düzenledim ve cevabını doğru olarak işaretledim –