2013-02-21 25 views
11

Maven ile oluşturup çalıştırmak için yapılandırılmış bir projem var. Proje, platforma özgü yerel kitaplıklara bağlıdır ve bu bağımlılıkları yönetmek için here bulunan stratejiyi kullanıyorum. Temel olarak, belirli bir platform için .dll veya .so dosyaları, bir jar içine paketlenir ve hedef platformu tanımlayan bir sınıflandırıcıyla Maven sunucusuna aktarılır. Maven bağımlılık eklentisi daha sonra platforma özgü jar'i paketinden çıkarır ve yerel kütüphaneleri hedef klasöre kopyalar.Maven 'exec: exec' ile Argümanlar kullanın

Normalde, bir Java programını çalıştırmak için mvn exec:java kullanırım, ancak exec:java uygulamaları, sınıf yolunu değiştirmemi engelleyen Maven ile aynı JVM'de çalışır. Yerel bağımlılıklar sınıf yoluna ekleneceğinden, bunun yerine mvn exec:exec'u kullanmak zorunda kalıyorum. Bu pom ilgili snippet'tir:

... 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-Djava.library.path=target/lib</argument> 
      <argument>-classpath</argument> 
      <classpath /> 
      <argument>com.example.app.MainClass</argument> 
     </arguments> 
    </configuration> 
</plugin> 
... 

Bu uygulamanın varsayılan yapılandırması için çalışıyor, ama komut satırında bazı isteğe bağlı parametreleri belirtmek isterler. İdeal olarak, ben böyle bir şey yapmak istiyorum:

mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>" 

Maalesef exec.args değişkenini belirterek (sınıf yolunu ayarlamak ve uygulamayı çalıştırmak için gereklidir) pom içinde ben argümanları üzerine yazar. Bunun etrafında bir yolu var mı? Komut satırında bazı isteğe bağlı argümanları belirlemenin en iyi yolu, pompamda ne yazdığımı yazmadan mı?

cevap

34

Maven ortam değişkenlerini kullanarak problemime makul derecede zarif bir çözüm bulmayı başardım.

varsayılan değerler

pom mülklerin olarak tanımlanan ve bağımsız değişkenleri olarak exec eklenti eklenir: benim yaptığım gibi

... 
<properties> 
    <argumentA>defaultA</argumentA> 
    <argumentB>defaultB</argumentB> 
</properties> 
... 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    <configuration> 
     <executable>java</executable> 
     <arguments> 
      <argument>-Djava.library.path=${project.build.directory}/lib</argument> 
      <argument>-classpath</argument> 
      <classpath /> 
      <argument>com.example.app.MainClass</argument> 
      <argument>-a</argument> 
      <argument>${argumentA}</argument> 
      <argument>-b</argument> 
      <argument>${argumentB}</argument> 
     </arguments> 
    </configuration> 
</plugin> 
... 

Şimdi tam varsayılan parametrelerle çalıştırmadan önce:

mvn exec:exec 

Ve komut satırında her argüman için varsayılanları kolayca geçersiz kılabilirsiniz:

+2

Ve nasıl ese argümanlarına Java kodunda erişilebilir, yani bu satır: 'String [] args'? – zygimantus

+2

@zygimantus istediğiniz mvn exec: java -Dexec.mainClass = "path.to.your.class" -Dexec.args = "arg1 arg2" 'orijinal sorunun kapsamı dışındadır. – dr0i