Spring Boot: Mengonfigurasi Kelas Utama

1. Ikhtisar

Tutorial singkat ini memberikan berbagai cara untuk menentukan titik masuk ke aplikasi Spring Boot melalui Maven dan Gradle.

Kelas utama aplikasi Spring Boot adalah kelas yang berisi metode main () public static void yang memulai Spring ApplicationContext . Secara default, jika kelas utama tidak ditentukan secara eksplisit, Spring akan mencari satu di classpath pada waktu kompilasi dan gagal untuk memulai jika tidak ada atau beberapa di antaranya ditemukan.

Tidak seperti aplikasi Java konvensional, kelas utama yang dibahas dalam tutorial ini tidak muncul sebagai properti metadata Kelas Utama di META-INF / MANIFEST.MF dari file JAR atau WAR yang dihasilkan.

Spring Boot mengharapkan properti metadata Kelas Utama artefak disetel ke org.springframework.boot.loader.JarLauncher(atau WarLauncher )yang berarti bahwa meneruskan kelas utama kita langsung ke baris perintah java tidak akan memulai aplikasi Spring Boot dengan benar.

Contoh manifes terlihat seperti ini:

Manifest-Version: 1.0 Start-Class: com.baeldung.DemoApplication Main-Class: org.springframework.boot.loader.JarLauncher

Sebagai gantinya, kita perlu mendefinisikan properti Start-Class dalam manifes yang dievaluasi oleh JarLauncher untuk memulai aplikasi.

Mari kita lihat bagaimana kita bisa mengontrol properti ini menggunakan Maven dan Gradle.

2. Maven

Kelas utama dapat didefinisikan sebagai elemen kelas-awal di bagian properti pom.xml :

  com.baeldung.DemoApplication  

Perhatikan bahwa properti ini hanya akan dievaluasi jika kita juga menambahkan spring-boot-starter-parent asdi pom.xml kami .

Alternatifnya, kelas utama dapat didefinisikan sebagai elemen mainClass dari spring-boot-maven-plugin di bagian plugin pom.xml kami :

   org.springframework.boot spring-boot-maven-plugin  com.baeldung.DemoApplication    

Contoh konfigurasi Maven ini dapat ditemukan di GitHub.

3. Gradle

Jika kami menggunakan plugin Spring Boot Gradle , ada beberapa konfigurasi yang diwarisi dari org.springframework.boot tempat kami dapat menentukan kelas utama kami.

Dalam file Gradle proyek, mainClassName dapat ditentukan dalam blok konfigurasi springBoot . Perubahan ini dibuat di sini diambil oleh bootRun dan bootJar tugas:

springBoot { mainClassName = 'cpm.baeldung.DemoApplication' }

Atau, kelas utama dapat didefinisikan sebagai mainClassName milik bootJar tugas Gradle:

bootJar { mainClassName = 'cpm.baeldung.DemoApplication' }

Atau sebagai atribut manifes dari tugas bootJar :

bootJar { manifest { attributes 'Start-Class': 'com.baeldung.DemoApplication' } }

Perhatikan bahwa kelas utama yang ditentukan dalam blok konfigurasi bootJar hanya memengaruhi JAR yang dihasilkan oleh tugas itu sendiri. Perubahan tersebut tidak memengaruhi perilaku tugas Spring Boot Gradle lainnya seperti bootRun .

Sebagai bonus, jika plugin aplikasi Gradle diterapkan ke proyek, mainClassName bisa didefinisikan sebagai properti global:

mainClassName = 'com.baeldung.DemoApplication' 

Kita dapat menemukan contoh konfigurasi Gradle ini di GitHub.

4. Menggunakan CLI

Kita juga dapat menentukan kelas utama melalui antarmuka baris perintah.

Org.springframework.boot.loader.PropertiesLauncher Spring Boot dilengkapi dengan argumen JVM untuk memungkinkan Anda mengganti kelas utama logis yang disebut loader.main :

java -cp bootApp.jar -Dloader.main=com.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher

5. Kesimpulan

Ada lebih dari beberapa cara untuk menentukan titik masuk ke aplikasi Spring Boot. Penting untuk diketahui bahwa semua konfigurasi ini hanyalah cara berbeda untuk mengubah manifes file JAR atau WAR.

Contoh kode kerja dapat ditemukan di sini dan di sini.