Seperti yang telah dicatat orang lain, agar file jar dapat dieksekusi, titik masuk aplikasi harus diatur dalam Main-Class
atribut file manifes. Jika file kelas dependensi tidak dilokasikan, maka mereka perlu diatur dalam Class-Path
entri file manifes.
Saya telah mencoba semua jenis kombinasi plugin dan apa yang tidak untuk tugas sederhana membuat jar yang dapat dieksekusi dan entah bagaimana, termasuk dependensi. Semua plugin tampaknya kurang satu atau lain cara, tetapi akhirnya saya mendapatkannya seperti yang saya inginkan. Tidak ada skrip misterius, tidak satu juta file mini berbeda mencemari direktori build, file skrip build yang cukup bersih, dan yang terpenting: tidak satu juta file kelas pihak ketiga asing bergabung ke arsip jar saya.
Berikut ini adalah copy-paste dari sini untuk kenyamanan Anda ..
[Cara-cara] membuat file zip distribusi dengan stoples ketergantungan di subdirektori /lib
dan menambahkan semua dependensi ke Class-Path
entri dalam file manifes:
apply plugin: 'java'
apply plugin: 'java-library-distribution'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.3.2'
}
// Task "distZip" added by plugin "java-library-distribution":
distZip.shouldRunAfter(build)
jar {
// Keep jar clean:
exclude 'META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA', 'META-INF/*.MF'
manifest {
attributes 'Main-Class': 'com.somepackage.MainClass',
'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' ')
}
// How-to add class path:
// /programming/22659463/add-classpath-in-manifest-using-gradle
// https://gist.github.com/simon04/6865179
}
Diselenggarakan sebagai intisari di sini .
Hasilnya dapat ditemukan di build/distributions
dan isi ritsleting terlihat seperti ini:
lib / commons-lang3-3.3.2.jar
MyJarFile.jar
Isi dari MyJarFile.jar#META-INF/MANIFEST.mf
:
Manifest-Versi: 1.0
Main-Class: com.somepackage.MainClass
Class-Path: lib / commons-lang3-3.3.2.jar