Ich versuche einen „generischen“ Weg zu finden, um eine transitive Abhängigkeit von der Aufnahme auszuschließen, ohne sie von allen Abhängigkeiten ausschließen zu müssen, die davon abhängen. Wenn ich beispielsweise slf4j ausschließen möchte, gehe ich wie folgt vor:
<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>
Dies dient zum einen der Bereinigung der POM-Datei, zum anderen der Vermeidung zukünftiger Probleme mit Personen, die Abhängigkeiten hinzufügen, die von dieser ausgeschlossenen Abhängigkeit abhängen - und zum Vergessen, sie auszuschließen.
Gibt es einen Weg?
maven
maven-2
dependencies
pom.xml
Sébastien Le Callonnec
quelle
quelle
Antworten:
Hilft das? http://jlorenzen.blogspot.com/2009/06/maven-global-excludes.html
"Angenommen, ich möchte das Avalon-Framework von meinem WAR ausschließen, würde ich meinem Projekt-POM Folgendes mit einem bereitgestellten Umfang hinzufügen. Dies funktioniert über alle transitiven Abhängigkeiten hinweg und ermöglicht es Ihnen, es einmal anzugeben.
Dies funktioniert sogar, wenn Sie es im übergeordneten POM angeben, wodurch verhindert wird, dass Projekte dies in allen untergeordneten POMs deklarieren müssen. "
quelle
runtime
Bereich anstelle desprovided
Bereichs?Ich habe ein leeres Glas erstellt und diese Abhängigkeit erstellt:
Es ist nicht perfekt, da Sie von nun an ein leeres Glas in Ihrem Kompilierungs- / Testpfad haben. Das ist aber nur kosmetisch.
quelle
system
Umfang ist jetzt veraltet: maven.apache.org/guides/introduction/…system
Bereichs zu vermeiden , lesen Sie das virtuelle Maven-Repository version99.grons.nl (Warnung: nur HTTP) oder (nur für Commons-Logging / log4j) "Alternative 3) leere Artefakte" hier: slf4j.org/faq.html#excludingJCLUm den Kommentar von dnault zu erweitern :
Sie können die Regel "Verbotene Abhängigkeiten" des Maven Enforcer-Plugins verwenden, um sicherzustellen, dass Abhängigkeiten ausgeschlossen sind. Man muss sie immer noch manuell ausschließen, aber der Build schlägt fehl, wenn jemand die Abhängigkeit versehentlich an anderer Stelle hinzufügt.
Außerdem gibt es eine offene Funktionsanforderung: MNG-1977 Globale Abhängigkeitsausschlüsse
quelle
Zur Erinnerung, hier ist die Antwort aus der offiziellen Dokumentation von Maven:
Wenn man einen Build robuster machen möchte, kann ein Versionsbereich verwendet werden. Dies würde sicherstellen, dass keine neuere Version der Abhängigkeit das Projekt stören kann.
Jede slf4j-api-Version> = 1.4.2 wird zur Laufzeit als angeboten (bereitgestellt) betrachtet, entweder aus einem konfigurierten Klassenpfad oder einem Container.
Verweise
quelle