6 Stimmen

Maven: Entpacken Sie Abhängigkeiten ... und vergessen Sie sie dann

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 des maven-dependency-plugin (siehe unten).

Wenn nun eine Bibliothek D die Bibliothek A verwendet, kann die Bibliothek D auf alle Klassen von A, B und C zugreifen. Ich möchte jedoch, dass D nur von A, nicht aber von den transitiven Abhängigkeiten B und C abhängig ist.

alt text

Ich weiß, dass dies durch manuelles Ausschließen von B und C für die Abhängigkeit A-D erreicht werden kann, aber ich möchte in A irgendwie erklären, dass B und C den Modulen, die A verwenden, nicht bekannt gemacht werden sollen.

        <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>

6voto

Peter Tillemans Punkte 34359

Ich denke, Sie können die Abhängigkeit mit dem Umfang "bereitgestellt" markieren, so dass das abhängige Projekt davon ausgeht, dass die jar's bereits "bereitgestellt" sind. Normalerweise werden sie vom Container bereitgestellt, in Ihrem Fall haben Sie sie in Abhängigkeit A "bereitgestellt".

In jedem Fall werden Module, die von A abhängig sind, die Abhängigkeiten B und C ignorieren.

4voto

Pascal Thivent Punkte 548176

Erste Option, verwenden Sie dependency:unpack anstelle von dependency:unpack-dependencies und somit B und C in der Plugin-Konfiguration aufzulisten, anstatt sie als Abhängigkeiten zu deklarieren (so dass sie für D unbekannt sind).

Zweite Möglichkeit: B und C werden als Abhängigkeiten von A mit einer provided Geltungsbereich, wie von Peter vorgeschlagen (siehe Transitive Abhängigkeiten ) und man wird sie in D nicht "sehen".

0voto

crowne Punkte 8317

Ich habe diese Woche etwas Ähnliches gemacht und das maven-shade-plugin benutzt, um ein uber jar zu erstellen. Als ich jedoch das Uber-Jar als Abhängigkeit zu einem anderen Projekt hinzufügte, wurden die zugrunde liegenden Jars vorübergehend hinzugefügt.
Um das Problem zu beheben, musste ich die Abhängigkeiten des uber-jar als <optional>true</optional> in seinem pom, und installieren Sie das uber-jar neu.
Siehe http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X