Proyek gradle saya menggunakan application
plugin untuk membuat file jar. Sebagai bagian dari dependensi transitif runtime, saya akhirnya berhenti org.slf4j:slf4j-log4j12
. (Ini direferensikan sebagai ketergantungan sub-transitif di setidaknya 5 atau 6 dependensi transitif lainnya - proyek ini menggunakan pegas dan hadoop, jadi semuanya kecuali wastafel dapur ditarik masuk ... tidak tunggu ... itu juga ada :) ).
Saya ingin mengecualikan slf4j-log4j12
toples secara global dari toples buatan saya. Jadi saya sudah mencoba ini:
configurations {
runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}
Namun, ini tampaknya mengecualikan semua org.slf4j
artefak termasuk slf4j-api
. Saat menjalankan mode debug saya melihat baris seperti:
org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).
Saya tidak ingin mencari sumber dari setiap slf4j-log4j12
ketergantungan transitif dan kemudian memiliki compile foo { exclude slf4j... }
pernyataan individu di dependencies
blok saya .
Memperbarui:
Saya juga mencoba ini:
configurations {
runtime.exclude name: "slf4j-log4j12"
}
Yang akhirnya tidak termasuk semuanya dari build! Seolah-olah saya tentukan group: "*"
.
Perbarui 2:
Saya menggunakan Gradle versi 1.10 untuk ini.
Jawaban:
Ah, berikut ini berhasil dan melakukan apa yang saya inginkan:
Tampaknya Aturan Pengecualian hanya memiliki dua atribut -
group
danmodule
. Namun, sintaks di atas tidak mencegah Anda menentukan properti arbitrer apa pun sebagai predikat. Saat mencoba mengecualikan dari dependensi individu, Anda tidak dapat menentukan properti arbitrer. Misalnya, ini gagal:dengan
Jadi meskipun Anda bisa menentukan ketergantungan dengan a
group:
danname:
Anda tidak bisa menentukan pengecualian denganname:
!?!Mungkin pertanyaan yang terpisah, tapi apa sebenarnya adalah modul kemudian? Saya bisa memahami gagasan Maven tentang groupId: artifactId: version, yang saya pahami diterjemahkan menjadi group: name: version di Gradle. Tapi kemudian, bagaimana saya tahu modul apa (dalam bahasa gradle) milik artefak Maven tertentu?
sumber
configurations { runtime.exclude group: '*' }
.Untuk mengecualikan satu atau beberapa library secara global, tambahkan berikut ini ke build.gradle Anda
Sekarang blok pengecualian memiliki dua grup properti dan modul . Bagi Anda yang berasal dari latar belakang maven, grup sama dengan groupId dan modul sama dengan artifactId . Contoh: Untuk mengecualikan com.mchange: c3p0: 0.9.2.1 berikut harus mengecualikan blok
sumber
Pendekatan Anda benar. (Bergantung pada situasinya, Anda mungkin ingin menggunakan
configurations.all { exclude ... }
.) Jika pengecualian ini benar-benar mengecualikan lebih dari satu ketergantungan (saya belum pernah memperhatikannya saat menggunakannya), laporkan bug di http://forums.gradle.org , idealnya dengan contoh yang dapat direproduksi.sumber
configurations.all{}
persis seperti yang saya cari. Terima kasih atas kiriman Peterpada contoh di bawah ini saya kecualikan
sumber
Saya menggunakan spring boot 1.5.10 dan mencoba mengecualikan logback, solusi yang diberikan di atas tidak berfungsi dengan baik, saya menggunakan konfigurasi sebagai gantinya
sumber
Selain apa yang dinyatakan @ berguiga-mohamed-amine, saya baru saja menemukan bahwa wildcard mengharuskan argumen modul meninggalkan string kosong:
sumber