Wie soll das Maven-Assembly-Plugin die in pom.xml definierten Ausschlüsse einhalten?

TL; DR

Wenn einige (spezifische) transitiven Abhängigkeiten @ si in der POM-Datei ausgeschlossen aber dieassembly descriptor ist so eingestellt, dass alle Abhängigkeiten abgerufen werden, das ausgeschlossene Abhängigkeiten werden eingeschlossen in der Montage.Wie kann ich das verhindern?

Ein bisschen Hintergrund

Einige Abhängigkeiten können schwierig zu handhaben sein, da sich ihre Gruppen-IDs und Artefakt-IDs bei fast jeder Version ändern (in meinem Fall Hüpfburg).

Ich rufe mehrere Versionen von Hüpfburg ab (138, 1,38, 1,45 und 1,50). Mein Ziel ist es, alle Versionen außer 1.50 zu entfernen. Um genau zu sein, ich habe eine Abhängigkeit (nennen wir essome.perfectly.done:job) die 1,50 importiert und eine andere how.many.castles:do-you-need) das alle anderen importiert. Es handelt sich um Unternehmensabhängigkeiten. Wenn Sie also eine echte groupId: artifactId angeben, können Sie diese nicht testen.

pom.xml

Meine Abhängigkeiten werden wie folgt deklariert:

<dependency>
    <groupId>some.perfectly.done</groupId>
    <artifactId>job</artifactId>
</dependency>
<dependency>
    <groupId>how.many.castles</groupId>
    <artifactId>do-you-need</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>*</artifactId>
        </exclusion>
        <exclusion>
            <groupId>bouncycastle</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
assembly.xml
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>bin</id>
    <formats>
        <format>zip</format>
    </formats>

    <!-- Adds dependencies to zip package under lib directory -->
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>false</useProjectArtifact>
            <useTransitiveFiltering>true</useTransitiveFiltering>
            <outputDirectory>lib</outputDirectory>
                        <outputFileNameMapping>${artifact.groupId}.${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>
    <!-- ... -->
</assembly>
Was bekomme ich
$ ls *bouncycastle*
bouncycastle.bcmail-jdk14-138.jar       org.bouncycastle.bcmail-jdk15on-1.50.jar  org.bouncycastle.bcprov-jdk15-1.45.jar
bouncycastle.bcprov-jdk14-138.jar       org.bouncycastle.bcpkix-jdk15on-1.50.jar  org.bouncycastle.bcprov-jdk15on-1.50.jar
org.bouncycastle.bcmail-jdk14-1.38.jar  org.bouncycastle.bcprov-jdk14-1.38.jar    org.bouncycastle.bctsp-jdk14-1.38.jar
Was ich erwarte (und brauche)
$ ls *bouncycastle*
org.bouncycastle.bcmail-jdk15on-1.50.jar  org.bouncycastle.bcpkix-jdk15on-1.50.jar  org.bouncycastle.bcprov-jdk15on-1.50.jar
Einige mögliche Leads können auf @ aufbau

Der wahre Wert in einer Antwort hier wäre, ein @ zu findech, generisc Lösung. Ich suche nicht zu lösenmein case, ich möchte eine Lösung für alle Personen mit einem ähnlichen Fall finden.

Als solches möchte ich einige Lösungen vermeiden, die funktionieren würden, sich aber wirklich auf einen bestimmten Fall beziehen, und häufig die POM-Logik in den Assembly-Deskriptor duplizieren müssen.

Dies sind jedoch Hinweise, die helfen können, wenn nichts Besseres gefunden werden kann.

Das Ausschlussmuster im Assembly-Deskriptor wiedergeben

Offensichtlich. In meinem eigenen Fall jedoch ziemlich unpraktisch, außer durch den intelligenten Einsatz vonincludes/excludes. Dies ist keine praktische Lösung.

Mehrere Abhängigkeitssätze erstellen

Hinweis, dass mir bewusst istdiese Frage wurde bereits gestellt, aber der einzige Versuch einer Antwort ist für meinen Fall unbefriedigend:

Wenn Sie so etwas haben, müssen Sie zwei DependencySet-Einträge definieren, von denen einer die Rückmeldung enthält [mituseTransitiveDependencies=false] und andere

(durch khmarbaise)

Verwendenmaven-dependency-plugin

Aufdie gleiche Frage wie oben, ein Ansatz, den ich verwenden könnte, wenn keine Frage gestellt wird, wurde vorgeschlagen: first usedependency:copy-dependencies, um meine korrekten Abhängigkeiten in ein temporäres Verzeichnis zu kopieren, und dann meine Zip-Datei aus diesem Verzeichnis zusammenzustellen.

Als Workaround ist dies wahrscheinlich die sinnvollste Lösung, da sie generisch ist und die Logik aus dem POM im Assembly-Deskriptor nicht dupliziert, obwohl dies den Build verlängert.

Seitenfrage: Warum?

Warum macht dasmaven-assembly-plugin so verhalten? Ich habe in der Dokumentation keinen Hinweis darauf gefunden. Ist es das gewünschte Verhalten oder ist es ein (bekannter / unbekannter) Fehler?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage