Jalankan Kaedah utama Java Menggunakan Gradle

1. Pengenalan

Dalam tutorial ini, kita akan meneroka kaedah yang berbeza untuk melaksanakan kaedah utama Java menggunakan Gradle.

2. Kaedah utama Java

Ada beberapa cara di mana kita dapat menjalankan kaedah utama Java dengan Gradle. Mari kita melihatnya dengan teliti menggunakan program sederhana yang mencetak mesej ke output standard:

public class MainClass { public static void main(String[] args) { System.out.println("Goodbye cruel world ..."); } }

3. Berjalan dengan Plugin Aplikasi

Plugin Aplikasi adalah plugin Gradle teras yang menentukan koleksi tugas siap digunakan yang membantu kami mengemas dan menyebarkan aplikasi kami.

Mari mulakan dengan memasukkan perkara berikut dalam fail build.gradle kami :

plugins { id "application" } apply plugin : "java" ext { javaMain } application { mainClassName = javaMainClass }

Plugin secara automatik menghasilkan tugas yang dipanggil run yang hanya memerlukan kita mengarahkannya ke kelas utama . Penutupan pada baris 9 melakukan perkara yang tepat, yang membolehkan kita mencetuskan tugas:

~/work/baeldung/tutorials/gradle-java-exec> ./gradlew run > Task :run Goodbye cruel world ... BUILD SUCCESSFUL in 531ms 2 actionable tasks: 1 executed, 1 up-to-date

4. Berjalan dengan JavaExec Task

Seterusnya, mari kita laksanakan tugas khusus untuk menjalankan kaedah utama dengan bantuan jenis tugas JavaExec :

task runWithJavaExec(type: JavaExec) { group = "Execution" description = "Run the main class with JavaExecTask" classpath = sourceSets.main.runtimeClasspath main = javaMainClass }

Kita perlu menentukan kelas utama pada baris 5 dan, sebagai tambahan, menentukan jalan kelas. Classpath dikira dari sifat lalai dari output binaan dan mengandungi jalan yang betul di mana kelas yang disusun sebenarnya diletakkan.

Perhatikan bahawa dalam setiap senario, kami menggunakan nama yang memenuhi syarat, termasuk pakej, dari kelas utama .

Mari jalankan contoh kita menggunakan JavaExec :

~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithJavaExec > Task :runWithJavaExec Goodbye cruel world ... BUILD SUCCESSFUL in 526ms 2 actionable tasks: 1 executed, 1 up-to-date

5. Berjalan dengan Exec Task

Akhirnya, kita dapat melaksanakan kelas utama kita menggunakan jenis tugas Exec asas . Oleh kerana pilihan ini memberi kita kemungkinan untuk mengkonfigurasi pelaksanaan dengan pelbagai cara, mari kita laksanakan tiga tugas khusus dan membincangkannya secara individu.

5.1. Berjalan dari Output Binaan yang Disusun

Pertama, kami membuat tugas Exec khusus yang berkelakuan serupa dengan JavaExec :

task runWithExec(type: Exec) { dependsOn build group = "Execution" description = "Run the main class with ExecTask" commandLine "java", "-classpath", sourceSets.main.runtimeClasspath.getAsPath(), javaMainClass }

Kita boleh menjalankan mana-mana yang boleh dilaksanakan (dalam kes ini java) dan menyampaikan argumen yang diperlukan agar ia dapat dijalankan.

Kami mengkonfigurasi path class dan menunjuk ke kelas utama kami pada baris 5, dan kami juga menambahkan kebergantungan pada task build pada baris 2. Ini perlu, kerana kami hanya dapat menjalankan kelas utama kami setelah disusun:

~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithExec > Task :runWithExec Goodbye cruel world ... BUILD SUCCESSFUL in 666ms 6 actionable tasks: 6 executed 

5.2. Berlari dari Jar Keluaran

Pendekatan kedua bergantung pada pembungkusan balang dari aplikasi kecil kami:

task runWithExecJarOnClassPath(type: Exec) { dependsOn jar group = "Execution" description = "Run the mainClass from the output jar in classpath with ExecTask" commandLine "java", "-classpath", jar.archiveFile.get(), javaMainClass } 

Perhatikan kebergantungan pada tugas jar pada baris 2 dan argumen kedua kepada java yang dapat dijalankan pada baris 5. Kami menggunakan balang biasa, jadi kami perlu menentukan titik masuk dengan parameter keempat:

~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithExecJarOnClassPath > Task :runWithExecJarOnClassPath Goodbye cruel world ... BUILD SUCCESSFUL in 555ms 3 actionable tasks: 3 executed

5.3. Berjalan dari Jar Keluaran yang Boleh Dilaksanakan

Cara ketiga juga bergantung pada pembungkusan balang, tetapi kami menentukan titik masuk dengan bantuan harta nyata :

jar { manifest { attributes( "Main-Class": javaMainClass ) } } task runWithExecJarExecutable(type: Exec) { dependsOn jar group = "Execution" description = "Run the output executable jar with ExecTask" commandLine "java", "-jar", jar.archiveFile.get() } 

Di sini, kita tidak perlu lagi menentukan jalan kelas , dan kita hanya boleh menjalankan balang:

~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithExecJarExecutable > Task :runWithExecJarExecutable Goodbye cruel world ... BUILD SUCCESSFUL in 572ms 3 actionable tasks: 3 executed

6. Kesimpulannya

Dalam artikel ini, kami meneroka pelbagai cara menjalankan kaedah utama Java menggunakan Gradle.

Di luar kotak, pemalam Aplikasi menyediakan tugas yang dapat dikonfigurasi minimum untuk menjalankan kaedah kami. The JavaExec jenis tugas membolehkan kita untuk menjalankan utama kaedah tanpa menyatakan apa-apa plugin.

Akhirnya, jenis tugas Exec generik dapat digunakan dalam pelbagai kombinasi dengan java yang dapat dilaksanakan untuk mencapai hasil yang sama tetapi memerlukan ketergantungan pada tugas lain.

Seperti biasa, kod sumber untuk tutorial ini boleh didapati di GitHub.