Proyek Jalankan Maven

231

Apakah ada "fase" atau "tujuan" Maven untuk hanya menjalankan metode utama dari kelas Java? Saya punya proyek yang ingin saya uji secara manual dengan hanya melakukan sesuatu seperti "mvn run".

Verhogen
sumber

Jawaban:

348

Lihat plugin exec maven . Anda dapat menjalankan kelas Java menggunakan:

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...

Doa bisa sesederhana mvn exec:javajika konfigurasi plugin ada di pom.xml Anda. Situs plugin di Mojohaus memiliki contoh yang lebih rinci .

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>com.example.Main</mainClass>
                    <arguments>
                        <argument>argument1</argument>
                    </arguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Robert Munteanu
sumber
14
seperti inilah seharusnya sebuah jawaban! referensi + contoh sederhana + contoh kompleks. contoh sederhana melakukan trik untuk saya (tidak perlu konfigurasi lagi)
codewing
1
apakah ada versi yang lebih baru dari plugin ini (lebih baru dari 1.2.1?)
Alexander Mills
Ya, ada versi yang lebih baru, jadi jangan menyalin fragmen di atas 1-ke-1 kecuali jika Anda ingin menggunakan versi 1.2.1 Lihat mojohaus.org/exec-maven-plugin/usage.html untuk versi terbaru Sampai sekarang it's 1.6.0
user1053510
Terima kasih, apakah Anda juga tahu cara menjalankan kelas utama jika dalam submodule dengan dependensi pada modul lain?
user1767316
Ini tidak sepenuhnya menjalankan kelas utama
Dexter
23

1. Edit POM.xml

Tambahkan properti berikut di pom.xml. Pastikan Anda menggunakan nama kelas yang sepenuhnya memenuhi syarat (yaitu dengan nama paket) yang berisi mainmetode:

<properties>
        <exec.mainClass>fully-qualified-class-name</exec.mainClass>
</properties>

2. Jalankan Perintah

Sekarang dari terminal, memicu perintah berikut:

mvn clean compile exec:java

CATATAN Anda dapat memberikan argumen lebih lanjut melalui -Dexec.args="xxx"flag.

Saikat
sumber
Apakah ini berhasil? Saya sudah mencobanya sebagai keduanya: <exec.mainClass> $ {foo.bar.SomeMainClass} </ exec.mainClass> dan <exec.mainClass> foo.bar.SomeMainClass </exec.mainClass> dan tidak berhasil . Kesalahannya sama: [GALAT] Gagal menjalankan tujuan org.codehaus.mojo: exec-maven-plugin: 1.6.0: java (default-cli) pada proyek newtrex: Parameter 'mainClass' untuk tujuan org.codehaus.mojo : exec-maven-plugin: 1.6.0: java hilang atau tidak valid -> [Help 1]
Nenad Bulatovic
Berhasil
@NenadBulatovic: Ini berfungsi jika Anda mengganti $ {foo.bar.SomeMainClass} dengan foo.bar.SomeMainClass -> tanpa $ atau {}
Krishna Santosh Sampath
14

Jawaban yang disebutkan di atas sudah benar tetapi saya menyederhanakannya untuk noobs seperti saya. Buka file pom proyek Anda. Tambahkan properti baru exec.mainClassdan berikan nilainya sebagai kelas yang berisi metode utama Anda. Bagi saya itu DriverClassdi mainpkg. Ubah sesuai proyek Anda. masukkan deskripsi gambar di sini

Setelah melakukan ini, navigasikan ke folder yang berisi proyek Anda pom.xmldan jalankan ini pada command prompt mvn exec:java. Ini harus memanggil metode utama.

sst
sumber
8

Tidak perlu menambahkan plugin baru di pom.xml. Jalankan saja perintah ini

mvn org.codehaus.mojo:exec-maven-plugin:1.5.0:java -Dexec.mainClass="com.example.Main" | grep -Ev '(^\[|Download\w+:)' 

Lihat plugin maven exec untuk lebih banyak penggunaan.

arulraj.net
sumber
Lewati argumen lebih lanjut melalui-Dexec.args="...arg..."
sstn
2

clean package exec:java -P Class_Containing_Main_Method perintah juga merupakan opsi jika Anda hanya memiliki satu metode Utama (PSVM) dalam proyek, dengan Pengaturan Maven berikut.

Jangan lupa menyebutkan kelas di <properties></properties>bagian pom.xml:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.main.class>com.test.service.MainTester</java.main.class>
</properties>

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <configuration>
           <mainClass>${java.main.class}</mainClass>
        </configuration>
</plugin>

STS Run Configuration bersama dengan Maven Setup di atas:

masukkan deskripsi gambar di sini

Abhijeet
sumber
Itu tidak cocok untuk saya. Bukankah -P untuk 'profil'? Jika Anda menentukannya di baris perintah mengapa Anda harus meletakkannya di properti plugin?
Rup
@Rup Ya, -Puntuk profil. Membagikan ini, karena ini juga merupakan opsi untuk menjalankan proyek Maven.
Abhijeet