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

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>

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.


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


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


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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.