2010-06-22 6 views
6

Ich habe eine Bibliothek A, die von den Bibliotheken B und C abhängt. Ich entpacke die Bibliotheksklassen von B und C in das jar für Bibliothek A unter Verwendung der Maven- dependency-plugin (siehe unten).Maven: Unpack-Abhängigkeiten ... und dann vergiss sie

Wenn nun eine Bibliothek D Bibliothek A verwendet, können Bibliothek D alle Zugriff auf die Klassen A, B und C. Allerdings mag ich D nur auf A abhängen, aber nicht auf der transitiven Abhängigkeiten B und C.

alt text

ich weiß, das durch manuelles ohne B und C für die Abhängigkeit AD erreicht werden kann, aber ich möchte irgendwie in A, das B zu erklären und C sind nicht mit A.

bekannt Modulen werden
 <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>unpack-dependencies</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>unpack-dependencies</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Antwort

6

Ich denke, Sie können die Abhängigkeit markieren mit dem Umfang "zur Verfügung gestellt", so dass das abhängige Projekt davon ausgehen wird, dass die Jar's bereits "bereitgestellt" sind. Normalerweise vom Container sie in Ihrem Fall zur Verfügung gestellt werden Sie „zur Verfügung gestellt“, um sie in Abhängigkeit A.

In jedem Fall Module auf einem abhängige die Abhängigkeiten B und C.

+0

Vielen Dank! Dieser Bereich funktioniert perfekt in meinem Fall! – mxro

4

Erste Option, verwendet dependency:unpack statt ignorieren dependency:unpack-dependencies und listet daher B und C in der Plugin-Konfiguration auf, anstatt sie als Abhängigkeiten zu deklarieren (so dass sie D unbekannt sind).

Zweite Option, erklären B und C als Abhängigkeiten von A mit einem provided Umfang wie von Peter vorgeschlagen (siehe Transitive Dependencies‎) und Sie werden nicht „sehen“ sie in D.

+0

Danke! Dependency Unpack scheint eine gute Option zu sein. Danke für den Link zur Maven-Dokumentation! Ich denke, die Beschreibung von "zur Verfügung gestellt" ist ein wenig irreführend. Aber dieser Bereich erfüllt genau die Aufgabe in dem oben gezeigten Fall. – mxro

0

Ich habe etwas ähnliches in dieser Woche mit das maven-shade-plugin zum Erstellen eines Uber-Glases. Wenn ich jedoch das Uber-Jar als Abhängigkeit zu einem anderen Projekt hinzufügte, wurden die zugrunde liegenden Jars transitiv hinzugefügt.
es zu beheben Ich hatte die Abhängigkeiten des uber-jar als <optional> wahr </optional > in seiner pom zu markieren, und die uber-jar neu installieren.
Siehe http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

Verwandte Themen