2016-09-02 6 views
0

Ich habe in meinem Projekt Maven Schatten-Plugin verwendet, um alle Abhängigkeiten jar Klassen unter einem Paket zB org.shade zu verlagern. *Maven schraffierten Glas verwendet als externe Projektabhängigkeit

Wenn ich versuche, in andere, dass die schraffierten Glas zu verwenden, Anwendung als maven Abhängigkeit zieht es Abhängigkeitsgläser.

Meine Erwartung ist, wenn Uber/schattiertes Glas als Maven-Abhängigkeit enthalten ist, sollte es kein anderes abhängiges Klassenglas ziehen, da bereits diese Klassen in schattiertem Glas umgepackt sind.

+0

Sie machen eine Verwechslung zwischen einem Mavenartefakt und dem Ergebnis des Bauprozesses dieses Artefakts (ein Glas oder ein schattiertes Glas). Das Hinzufügen eines Artefakts als Abhängigkeit zu einem Projekt ist nicht nur ein "download the jar" -Ding, es analysiert den Pom der Abhängigkeit, enthält transitive Abhängigkeiten, fügt eventuell auch Quellen oder Tests hinzu, abhängig von der Pom-XML, ... –

+0

Zeig uns wie Sie schließen Ihr gemeinsames Glas ein. –

Antwort

1

Das klassische Szenario ist:

  • Ein Projekt eine uber-jar Herstellung hat seine eigenen Abhängigkeiten (dependency Elemente in seiner pom.xml-Datei), die dann verpackt werden zusammen in einem uber-jar als Maven Artefakts
  • Bei der Verwendung dieses Überglases als Abhängigkeit (dependency Element) eines anderen Projekts würde Maven dann seine Datei <artifact>-<version>.pom (die zusammen mit dem endgültigen Artefakt in das Maven-Repository veröffentlicht wurde) inspizieren, was im Grunde eine umbenannte Kopie seiner ursprünglichen Datei pom.xml ist Abhängigkeiten (dependency Element) deklariert (genau die Abhängigkeiten in das Uber-Jar verpackt).
  • Da Sie bereits sie gepackt haben, würden Sie dann gerne die .pom Datei (und seine dependencies Element) ignorieren, für die Sie exclusions hinzufügen müssen, wie folgend:

    <dependency> 
        <groupId>com.sample</groupId> 
        <artifactId>something-uber</artifactId> 
        <version>some-version</version> 
        <exclusions> 
         <exclusion> 
          <groupId>*</groupId> 
          <artifactId>*</artifactId> 
         </exclusion> 
        </exclusions> 
    </dependency> 
    

Hinweis: die Feature oben ist nur verfügbar seit Maven 3.2.1.

Als solche machen Sie Maven klar, dass Sie keine transitive Abhängigkeit wollen und Maven dependency mediation sie dann nicht auslösen würde.


Als Randbemerkung: Das ist keine gute Praxis ein uber-jar als Abhängigkeit eines Projekts zu haben: es wird nur schwieriger machen Wartung, da Sie nicht transitive Abhängigkeiten über dependencyManagement oder dependencies Reihenfolge der steuern kann das abhängige Projekt. Daher müssen Sie das Uber-Jar immer neu packen, wenn eine Abhängigkeit (eine seiner transitiven) Wartung benötigen würde (Version ändern usw.) und viel weniger Kontrolle über das abhängige Projekt haben würde (wiederum, härtere Wartung).

Verwandte Themen