¿Cómo hacer que maven-assembly-plugin respete las exclusiones definidas en pom.xml?

TL; DR

Cuando algunas dependencias transitivas (específicas) sonexcluido en el archivo POM pero elel descriptor de ensamblaje está configurado para recuperar todas las dependencias, else incluirán dependencias excluidas en asamblea.¿Cómo puedo prevenir esto?

Un poco de trasfondo

Algunas dependencias pueden ser difíciles de manejar porque sus ID de grupo e ID de artefacto cambian en casi cada versión (en mi caso, bouncycastle).

Estoy recuperando varias versiones de bouncycastle (138, 1.38, 1.45 y 1.50). Mi propósito es eliminar todas las versiones que no sean 1.50. Para ser precisos, tengo una dependencia (llamémoslasome.perfectly.done:job) que importa 1,50 y otro (how.many.castles:do-you-need) que importa todos los demás. Son dependencias corporativas, por lo que proporcionarle groupId real: artifactId no lo ayudaría a realizar las pruebas.

pom.xml

Mis dependencias se declaran de la siguiente manera:

<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>
ensamblaje.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>
Lo que consigo
$ 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
Lo que espero (y necesito)
$ ls *bouncycastle*
org.bouncycastle.bcmail-jdk15on-1.50.jar  org.bouncycastle.bcpkix-jdk15on-1.50.jar  org.bouncycastle.bcprov-jdk15on-1.50.jar
Algunas posibles pistas para construir sobre

El valor real en una respuesta aquí sería encontrar unreal, genérico solución. No estoy buscando resolvermi caso, me gustaría encontrar una solución para todas las personas con un caso similar.

Como tal, me gustaría evitar algunas soluciones que funcionarían, pero que están realmente relacionadas con un caso particular y que a menudo requieren duplicar la lógica del POM en el descriptor del ensamblaje.

Sin embargo, estos son cables que pueden ayudar si no se puede encontrar nada mejor.

Reproduzca el patrón de exclusión dentro del descriptor de ensamblaje

Obviamente. Sin embargo, en mi propio caso, poco práctico, excepto por el uso inteligente deincludes/excludes. Esta no es una solución práctica.

Hacer varios conjuntos de dependencias

Tenga en cuenta que soy conscienteesta pregunta ya ha sido formulada, pero el único intento de respuesta no es satisfactorio para mi caso:

Si tiene tal cosa, necesita definir dos entradas dependencySet, una que incluya el logback [conuseTransitiveDependencies=false] y otra.

(porkhmarbaise)

Utilizarmaven-dependency-plugin

Enla misma pregunta que arriba, se ha propuesto un enfoque que podría utilizar si no se hace ninguna pregunta: primer usodependency:copy-dependencies para copiar mis dependencias correctas en un directorio temporal, luego ensamblar mi zip desde este directorio.

Como solución alternativa, esta es probablemente la solución más válida, ya que es genérica y no duplica la lógica del POM en el descriptor de ensamblaje, aunque esto hace que la compilación sea más larga.

Pregunta secundaria: ¿por qué?

¿Por qué elmaven-assembly-plugin comportarse de esta manera? No encontré ninguna referencia a esto en la documentación. ¿Es el comportamiento deseado, o es un error (conocido / desconocido)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta