Como o maven-assembly-plugin respeita as exclusões definidas no pom.xml?
Quando algumas dependências transitivas (específicas) sãoexcluído no arquivo POM mas oo descritor de assembly está definido para buscar todas as dependências, adependências excluídas serão incluídas em montagem.Como posso evitar isso?
Um pouco de fundoAlgumas dependências podem ser difíceis de manipular porque seus groupIds e artifactIds mudam em quase todas as versões (no meu caso, bouncycastle).
Estou recuperando várias versões do castelo inflável (138, 1,38, 1,45 e 1,50). Meu objetivo é eliminar todas as versões que não sejam a 1,50. Para ser mais preciso, tenho uma dependência (vamos chamá-losome.perfectly.done:job
) que importa 1,50 e outro (how.many.castles:do-you-need
) que importa todos os outros. São dependências corporativas, portanto, fornecer ID de grupo real: ID de artefato não ajudaria em testes.
Minhas dependências são declaradas da seguinte maneira:
<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>
O que eu ganho$ 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
O que eu espero (e preciso)$ ls *bouncycastle*
org.bouncycastle.bcmail-jdk15on-1.50.jar org.bouncycastle.bcpkix-jdk15on-1.50.jar org.bouncycastle.bcprov-jdk15on-1.50.jar
Algumas pistas possíveis para se basearO valor real em uma resposta aqui seria encontrar umreal, genérico solução. Eu não estou olhando para resolvermeu Nesse caso, gostaria de encontrar uma solução para todas as pessoas com um caso semelhante.
Como tal, eu gostaria de evitar algumas soluções que funcionariam, mas que estão realmente relacionadas a um caso específico e, muitas vezes, exigem duplicar a lógica do POM no descritor de montagem.
No entanto, esses leads podem ajudar se nada melhor puder ser encontrado.
Reproduzir o padrão de exclusão dentro do descritor de montagemObviamente. No meu caso, porém, bastante impraticável, exceto pelo uso inteligente deincludes
/excludes
. Esta não é uma solução prática.
Note que estou cienteesta pergunta já foi feita, mas a única tentativa de resposta é insatisfatória para o meu caso:
Se você tem isso, precisa definir duas entradas dependencySet, uma que inclua o logback [comuseTransitiveDependencies=false
] e outro.
(porkhmarbaise)
Usarmaven-dependency-plugin
Ema mesma pergunta acima, uma abordagem que eu possa usar se nenhuma pergunta for proposta: primeiro usodependency:copy-dependencies
para copiar minhas dependências corretas para um diretório temporário e montar meu zip a partir deste diretório.
Como solução alternativa, essa é provavelmente a solução mais válida, pois é genérica e não duplica a lógica do POM no descritor de assembly, embora isso torne a construção mais longa.
Pergunta secundária: Por quê?Por que omaven-assembly-plugin
se comportar assim? Não encontrei nenhuma referência a isso na documentação. É o comportamento desejado ou é um bug (conhecido / desconhecido)?