Maven kullanarak bir programı nasıl çalıştırırım?


120

Bir Maven hedefinin java sınıfının yürütülmesini tetiklemesini istiyorum. Şu Makefilesatırlarla a üzerinden geçmeye çalışıyorum :

neotest:
    mvn exec:java -Dexec.mainClass="org.dhappy.test.NeoTraverse"

Ve şu anda mvn neotestne olduğunu üretmek istiyorum make neotest.

Ne exec eklenti dokümantasyonu ne de Maven Ant görev sayfalarının herhangi bir basit örneği yoktu.

Şu anda şuradayım:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.1</version>
  <executions><execution>
    <goals><goal>java</goal></goals>
  </execution></executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

Eklentiyi komut satırından nasıl tetikleyeceğimi bilmiyorum.

Yanıtlar:


149

İle genel yapılandırma exec-maven-eklentisi için tanımlanmış olması:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4.0</version>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

çağırma mvn exec:javakomut satırında sınıfını yürütmek üzere yapılandırılmıştır eklenti çağıracağı org.dhappy.test.NeoTraverse.

Eklentiyi komut satırından tetiklemek için şunu çalıştırın:

mvn exec:java

Eğer çalıştırmak istediğiniz Şimdi, eğer exec:javastandart yapı parçası olarak hedefe, belirli bir hedefe karşı bağlamak gerekir fazın ait varsayılan ömrü . Bunu yapmak için, öğedeki phasehedefi bağlamak istediğinizi belirtin execution:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.4</version>
  <executions>
    <execution>
      <id>my-execution</id>
      <phase>package</phase>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>org.dhappy.test.NeoTraverse</mainClass>
  </configuration>
</plugin>

Bu örnekle, sınıfınız packageaşama sırasında çalıştırılacaktır . Bu sadece bir örnek, ihtiyaçlarınıza göre uyarlayın. Eklenti sürüm 1.1 ile de çalışır.


1
İlk başta kafam karıştı: exec:javaScala ve Clojure kodu için de kullanılabilir, kendi başına Java kodu olması gerekmez.
sağda

8
Sürüm 1.4.0 olmalıdır
Walery Strauch

Benim için çalıştı! Teşekkürler!
mrddr

25

Birden fazla programı yürütmek için bir profilesbölüme de ihtiyacım vardı :

<profiles>
  <profile>
    <id>traverse</id>
    <activation>
      <property>
        <name>traverse</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <configuration>
            <executable>java</executable>
            <arguments>
              <argument>-classpath</argument>
              <argument>org.dhappy.test.NeoTraverse</argument>
            </arguments>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

Bu daha sonra şu şekilde çalıştırılabilir:

mvn exec:exec -Ptraverse

1
Bu <argument>-classpath</argument><classpath />çizgide neler oluyor ? Bunun doğru olduğunu sanmıyorum.
GreenGiant

1
Evet, büyük ihtimalle <classpath />etiket yanlışlıkla oraya ulaştı ve kaldırılması gerekiyor. Yani bu satır şöyle görünecek:<argument>-classpath</argument>
Dimitry K

7
Bu bir hata değil. Bu, pom.xml'de belirtilen bağımlılıkların sınıf yolunun bir parçası olarak kullanılması gerektiğini gösterir.
user924272
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.