Sampai sekarang saya membuat file JAR yang dapat dijalankan melalui fungsi "Ekspor ..." Eclipse tetapi sekarang saya beralih ke IntelliJ IDEA dan Gradle untuk membangun otomatisasi.
Beberapa artikel di sini menyarankan plugin "aplikasi", tetapi ini tidak sepenuhnya mengarah pada hasil yang saya harapkan (hanya JAR, tidak ada skrip awal atau semacamnya).
Bagaimana saya bisa mencapai hasil yang sama dengan Eclipse dengan dialog "Ekspor ..."?
Jawaban JB Nizet dan Jorge_B benar.
Dalam bentuknya yang paling sederhana, membuat JAR yang dapat dieksekusi dengan Gradle hanyalah masalah menambahkan entri yang sesuai ke manifes . Namun, jauh lebih umum untuk memiliki dependensi yang perlu dimasukkan pada classpath, membuat pendekatan ini sulit dalam praktik.
Itu Aplikasi Plugin memberikan pendekatan alternatif; alih-alih membuat JAR yang dapat dieksekusi, ia menyediakan:
run
tugas untuk memfasilitasi dengan mudah menjalankan aplikasi langsung dari membanguninstallDist
tugas yang menghasilkan struktur direktori termasuk JAR dibangun, semua guci bahwa itu tergantung pada, dan skrip startup yang tarikan itu semua bersama-sama ke program Anda dapat menjalankandistZip
dandistTar
tugas yang membuat arsip yang berisi distribusi aplikasi lengkap (skrip startup dan JAR)Pendekatan ketiga adalah membuat apa yang disebut "JAR gemuk" yang merupakan JAR yang dapat dieksekusi yang tidak hanya mencakup kode komponen Anda, tetapi juga semua dependensinya. Ada beberapa plugin berbeda yang menggunakan pendekatan ini. Saya telah menyertakan tautan ke beberapa yang saya ketahui; Saya yakin masih ada lagi.
sumber
configurations.runtime
ke dependensi bundel bundel dalam tabung tunggal..tar
/.zip
file yang dihasilkan?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 dalamClass-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 keClass-Path
entri dalam file manifes:Diselenggarakan sebagai intisari di sini .
Hasilnya dapat ditemukan di
build/distributions
dan isi ritsleting terlihat seperti ini:Isi dari
MyJarFile.jar#META-INF/MANIFEST.mf
:sumber
lib
direktori file zip / tar yang dihasilkan, melainkan dilib
direktori induk, seperti yang disarankan jawaban ini. Solusi ini sepertinya bekerja dengan baik untuk saya."lib/$it.name"
menjadi"$it.name"
akan melakukan pekerjaan.Solusi upaya paling tidak bagi saya adalah menggunakan plugin gradle-shadow-plugin
Selain menerapkan plugin, semua yang perlu dilakukan adalah:
Konfigurasikan tugas jar untuk membuat kelas Utama Anda menjadi manifes
Jalankan tugas gradle
Ambil app-versi-all.jar dari build / libs /
Dan akhirnya jalankan melalui:
sumber
build.gradle
.'com.my.app.MainKt'
. Tanpa info lebih lanjut, saya tidak dapat membantu Anda lebih jauh.Sudahkah Anda mencoba tugas 'installApp'? Apakah itu tidak membuat direktori lengkap dengan satu set skrip mulai?
http://www.gradle.org/docs/current/userguide/application_plugin.html
sumber
installApp
tidak membuatMETA-INF/MANIFEST.MF
file. Apakah saya melakukan sesuatu yang salah?installApp
tugas di daftar tugas Plugin Aplikasi . Apakah maksud AndainstallDist
sebagai gantinya?installApp
diubah namanya menjadiinstallDist
di Gradle 3.0. Ini catatan rilisnya .Terima kasih Konstantin, itu berfungsi seperti pesona dengan sedikit nuansa. Untuk beberapa alasan, menentukan kelas utama sebagai bagian dari manifes jar tidak cukup berhasil dan ia menginginkan atribut mainClassName sebagai gantinya. Berikut ini cuplikan dari build.gradle yang mencakup segalanya untuk membuatnya berfungsi:
Setelah menjalankan gradle shadowJar, Anda mendapatkan myapp- {versi} -all.jar di folder build Anda yang dapat dijalankan sebagai java -jar myapp- {version} -all.jar.
sumber
Anda dapat menentukan artefak tabung dalam pengaturan modul (atau struktur proyek).
Membuat toples semudah mengklik "Bangun artefak ..." dari menu Bangun. Sebagai bonus, Anda dapat mengemas semua dependensi ke dalam satu toples.
Diuji pada IntelliJ IDEA 14 Ultimate.
sumber
Saya memeriksa beberapa tautan untuk solusinya, akhirnya melakukan langkah-langkah yang disebutkan di bawah untuk membuatnya berfungsi. Saya menggunakan Gradle 2.9.
Buat perubahan berikut di file build, gradle Anda:
Sebutkan plugin:
Berikan Buildscript:
Berikan Kelas Utama:
Buat fatjar:
Jalankan fatjar dari / build / libs /:
sumber
Anda dapat menggunakan plugin SpringBoot:
Buat toples
Dan kemudian jalankan
Catatan: proyek Anda TIDAK perlu menjadi proyek SpringBoot untuk menggunakan plugin ini.
sumber