Schließen Sie das Java-Paket vom Abhängigkeitsjar aus

8

Ich möchte jar vom Drittanbieter verwenden. Aber in diesem Jar habe ich eine alte Version des Java-Pakets org.osgi.framework Ich muss einen Weg finden, das Paket vom Hauptprojekt auszuschließen. Etwas wie das:

%Vor%

Können Sie eine Lösung empfehlen?

    
Peter Penzov 22.01.2016, 20:57
quelle

1 Antwort

4

Obwohl eine bessere Lösung wäre, die Abhängigkeit (ohne das unerwünschte Paket) mit einem Klassifikator neu zu packen (wie in ​​dieser Antwort beschrieben) ) und veröffentlichen Sie es auf Ihrem Enterprise-Maven-Repository (oder Installieren Sie es in Ihrem lokalen Maven-Cache, wenn es sich um ein persönliches Projekt handelt, unten ist eine andere Lösung, die auch Ihren Bedürfnissen entsprechen sollte.

Sie könnten ein Multi-Modul Maven-Projekt haben, das ein Modul mit genau dieser Abhängigkeit enthält und Sie darin könnte das Maven Shade Plugin und seine filters -Eigenschaft verwenden, wie in seinem offizielles Beispiel .

Gemäß der Dokumentation , das filters element:

  

Archiv Filter verwendet werden. Ermöglicht die Angabe eines Artefakts in Form eines zusammengesetzten Bezeichners, wie er von artifactSet verwendet wird, und eines Satzes von Einschluss- / Ausschlussdateimustern zum Filtern, welche Inhalte des Archivs dem schattierten Jar hinzugefügt werden

In Ihrem Fall sollte die folgende Konfiguration den Filter anwenden:

%Vor%

Das generierte Jar aus der package -Phase sollte dieses Paket nicht mehr enthalten. Als Teil der Maven-Ausgabe sollten Sie sehen:

  

[INFO] --- maven-shade-plugin: 2.4.3: Schatten (Standard) @ test-checksum ---
  [INFO] Einschließlich com.ibm:com.ibm.ws.admin.client:jar:8.5.0 im schattierten Jar.
  [INFO] Ersetzen des ursprünglichen Artefakts durch ein schattiertes Artefakt.

Sie können den Inhalt des generierten Jar überprüfen, das gefilterte Paket sollte nicht dort sein.

Dann wird die Ausgabe dieses Moduls das "neue" / gefilterte Glas haben, nach dem Sie gesucht haben. Dann müsste das Verbrauchermodul nur eine Abhängigkeit von diesem Modul haben und als solches den Filter angewendet haben.
Ein Beispiel für ein solches Multimodulprojekt wäre:

%Vor%

Aktualisieren
Weitere Anmerkung: In dem Modul, das den Filter anwendet, sollten Sie die Abhängigkeit als optional deklarieren, so dass das Consumer-Modul nicht funktioniert Bring es nicht wieder transitiv rein.

%Vor%

Optional wirkt sich nicht auf das Modul selbst aus, sondern nur auf den Verbraucher. Und das Shade-Plugin wird weiter funktionieren (ich habe es erneut getestet, nur für den Fall).

    
A_Di-Matteo 22.01.2016 21:05
quelle

Tags und Links