Saya mencoba menemukan cara "umum" untuk mengecualikan ketergantungan transitif agar tidak disertakan tanpa harus mengecualikannya dari semua ketergantungan yang bergantung padanya. Misalnya, jika saya ingin mengecualikan slf4j, saya melakukan hal berikut:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jmx</artifactId>
<version>3.3.2.GA</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.4.0.GA</version>
<type>jar</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Ini sebagian untuk membersihkan file pom, sebagian untuk menghindari masalah di masa mendatang dengan orang-orang yang menambahkan dependensi yang bergantung pada dependensi yang dikecualikan itu - dan lupa mengecualikannya.
Apakah ada jalan
maven
maven-2
dependencies
pom.xml
Sébastien Le Callonnec
sumber
sumber
Jawaban:
Apakah ini membantu? http://jlorenzen.blogspot.com/2009/06/maven-global-excludes.html
"Dengan asumsi saya ingin mengecualikan avalon-framework dari WAR saya, saya akan menambahkan yang berikut ini ke project POM saya dengan cakupan yang disediakan. Ini berfungsi di semua dependensi transitif dan memungkinkan Anda untuk menentukannya sekali.
<dependencies> <dependency> <artifactId>avalon-framework</artifactId> <groupId>avalon-framework</groupId> <version>4.1.3</version> <scope>provided</scope> </dependency> </dependencies>
Ini bahkan berfungsi saat menentukannya di POM induk, yang akan mencegah proyek untuk mendeklarasikannya di semua POM turunan. "
sumber
runtime
ruang lingkup, bukanprovided
ruang lingkup?Saya membuat toples kosong dan membuat ketergantungan ini:
<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <scope>system</scope> <systemPath>${basedir}/src/lib/empty.jar</systemPath> <version>0</version> </dependency>
Ini tidak sempurna karena mulai sekarang Anda memiliki tabung kosong di jalur kompilasi / pengujian Anda. Tapi itu hanya kosmetik.
sumber
system
scope sekarang tidak digunakan lagi: maven.apache.org/guides/introduction/…system
cakupan, lihat repositori Maven virtual version99.grons.nl (Peringatan: hanya HTTP) atau (hanya untuk pencatatan umum / log4j) lihat "alternatif 3) artefak kosong" di sini: slf4j.org/faq.html#excludesJCLUntuk memperluas komentar dnault :
Seseorang dapat menggunakan aturan Banned Dependencies dari plugin Maven Enforcer untuk memastikan dependensi dikecualikan. Anda masih harus mengecualikannya secara manual, tetapi build akan gagal jika ada yang salah menambahkan dependensi di tempat lain.
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jmx</artifactId> <version>3.3.2.GA</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.4.1</version> <executions> <execution> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedDependencies> <excludes> <exclude>org.slf4j:slf4j-api</exclude> </excludes> </bannedDependencies> </rules> </configuration> </execution> </executions> </plugin> </plugins>
Juga ada permintaan fitur terbuka: MNG-1977 Pengecualian ketergantungan global
sumber
Sebagai pengingat, berikut adalah jawaban dari dokumentasi resmi Maven:
Jika seseorang ingin membuat build lebih kuat, rentang versi dapat digunakan. Ini akan memastikan bahwa tidak ada versi terbaru dari ketergantungan yang dapat mengganggu proyek.
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>[1.4.2,)</version> <scope>provided</scope> </dependency>
Setiap versi slf4j-api> = 1.4.2 akan dianggap sebagai ditawarkan (disediakan) pada waktu proses, baik dari classpath atau penampung yang dikonfigurasi.
Referensi
sumber