Bagaimana cara menjalankan program menggunakan Maven?

120

Saya ingin tujuan Maven memicu eksekusi kelas java. Saya mencoba untuk bermigrasi melalui a Makefiledengan garis:

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

Dan saya ingin mvn neotestmenghasilkan apa yang make neotestdilakukan saat ini.

Baik dokumentasi plugin exec maupun halaman tugas Maven Ant tidak memiliki contoh langsung apa pun.

Saat ini, saya berada di:

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

Saya tidak tahu cara memicu plugin dari baris perintah.

Akan
sumber

Jawaban:

149

Dengan konfigurasi global yang telah Anda tentukan untuk exec-maven-plugin:

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

meminta mvn exec:javapada baris perintah akan memanggil plugin yang dikonfigurasi untuk menjalankan kelas org.dhappy.test.NeoTraverse.

Jadi, untuk memicu plugin dari baris perintah, jalankan saja:

mvn exec:java

Sekarang, jika Anda ingin menjalankan exec:javatujuan sebagai bagian dari build standar Anda, Anda harus mengikat tujuan ke fase tertentu dari siklus hidup default . Untuk melakukan ini, nyatakan phaseyang ingin Anda ikat tujuan di executionelemen:

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

Dengan contoh ini, kelas Anda akan dieksekusi selama packagefase tersebut. Ini hanyalah sebuah contoh, sesuaikan dengan kebutuhan Anda. Bekerja juga dengan plugin versi 1.1.

Pascal Thivent
sumber
1
Awalnya saya bingung: exec:javabisa digunakan untuk kode Scala dan Clojure juga, tidak harus kode Java saja.
kanan
8
Versi harus 1.4.0
Walery Strauch
Bekerja untuk saya! Terima kasih!
mrddr
25

Untuk menjalankan banyak program, saya juga membutuhkan profilesbagian:

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

Ini kemudian dapat dieksekusi sebagai:

mvn exec:exec -Dtraverse
Akan
sumber
1
Apa yang terjadi dengan <argument>-classpath</argument><classpath />garis itu? Saya tidak berpikir itu benar.
GreenGiant
1
Ya, kemungkinan besar <classpath />tag tiba di sana karena kesalahan dan harus dihapus. Jadi garis itu akan terlihat:<argument>-classpath</argument>
Dimitry K
7
Itu tidak salah. Itu menunjukkan bahwa dependensi yang ditentukan dalam pom.xml harus digunakan sebagai bagian dari jalur kelas.
user924272