Saya memiliki build multiproyek dan saya memberi tugas untuk membangun tabung lemak di salah satu subproyek. Saya membuat tugas yang mirip dengan yang dijelaskan di buku masak .
jar {
from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
manifest { attributes 'Main-Class': 'com.benmccann.gradle.test.WebServer' }
}
Menjalankannya menghasilkan kesalahan berikut:
Penyebab: Anda tidak dapat mengubah konfigurasi yang bukan dalam keadaan tidak terselesaikan!
Saya tidak yakin apa arti kesalahan ini. Saya juga melaporkan ini di Gradle JIRA seandainya itu adalah bug .
def mainClassName
agar kode berfungsi ... Saya menerima Tidak dapat mengatur properti yang tidak diketahui 'mainClassName' untuk proyek rootimplementation
konfigurasi baru, bukan yang sekarang sudah usangcompile
. Kode di atas membuatkan saya toples kecil tanpa ketergantungan. Ketika saya mengubahnya (from { configurations.implementation.collect {...} }
), terjadi kesalahan yang mengatakan bahwa menyelesaikan 'implementasi' konfigurasi secara langsung tidak diizinkanconfigurations.compileClasspath
akan memperbaiki semuaimplementation
, tetapi akan meninggalkanapi
dependensi afik. Ditemukan di sini di jawaban lain solusinyaruntimeClasspath
. Itu termasukapi
dependensi juga.Jawaban dari @felix hampir membawaku kesana. Saya punya dua masalah:
Setup berikut menyelesaikan ini
Untuk menambahkan ini ke tugas assemble atau build standar, tambahkan:
Edit: terima kasih kepada @mjaggard: di Gradle versi terbaru, ubah
configurations.runtime
menjadiconfigurations.runtimeClasspath
sumber
artifacts
: persis seperti yang saya cari.gradle fatJar
runtime, dependensi tampaknya tidak dikompilasi, sehingga tidak dapat disalin.Jika Anda ingin
jar
tugas berperilaku normal dan juga memilikifatJar
tugas tambahan , gunakan yang berikut ini:Bagian yang penting adalah
with jar
. Tanpanya, kelas proyek ini tidak termasuk.sumber
group "build"
dan tugas ini akanbuild
dikelompokkan (dengan tugas lain, yaitujar
tugas.with jar
kata kunci, apa sebenarnya fungsinya?Ini bekerja dengan baik untuk saya.
Kelas Utama saya:
Dan itu adalah konten file saya build.gradle:
Dan saya menulis yang berikut ini di konsol saya:
Dan hasilnya bagus:
sumber
Untuk menghasilkan JAR gemuk dengan kelas utama yang dapat dieksekusi, untuk menghindari masalah dengan JAR yang ditandatangani, saya sarankan plugin gradle-one-jar . Plugin sederhana yang menggunakan proyek One-JAR .
Mudah digunakan:
sumber
Sulusi sederhana
sumber
Jawaban dari @ben hampir berhasil untuk saya kecuali dependensi saya terlalu besar dan saya mendapat error berikut
Untuk memperbaiki masalah ini, saya harus menggunakan kode berikut
sumber
Bagi mereka yang perlu membangun lebih dari satu toples dari proyek tersebut.
Buat fungsi dalam gradle:
lalu hubungi:
Bekerja pada gradle 5.
Stoples akan ditempatkan di
./build/libs
.sumber
Saya menggunakan tugas
shadowJar
dengan plugin. com.github.jengelman.gradle.plugins:shadow:5.2.0
Penggunaan hanya menjalankan
./gradlew app::shadowJar
file hasil akan diMyProject/app/build/libs/shadow.jar
build.gradle
file tingkat atas :build.gradle
file tingkat modul aplikasisumber
Gradle 6.3, perpustakaan Java. Kode dari "tugas jar" menambahkan dependensi ke "build / libs / xyz.jar" saat menjalankan tugas " gradle build ".
sumber
Jika Anda terbiasa dengan semut, Anda dapat mencoba hal yang sama dengan Gradle juga:
sumber