maven包依赖传递问题,mvn dependency:tree查看无包依赖,assembly插件打包时被打进jar包
1.现象
使用maven-assembly-plugin插件打包多module项目p,格式为zip,打完的包中多出了pom中未直接依赖的a.jar包
2.排查
mvn dependency:tree 查看依赖树,并无a.jar的依赖
mvn dependency:tree -Dverbose 查看详细依赖情况发现来源为b.jar
查看b.jar的pom,如下:
<dependency>
<artifactId>b</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>*</artifactId>
<groupId>*</groupId>
</exclusion>
</dependency>
b.jar中依赖a.jar,b.jar使用通配符形式排除所有包
3.结论
项目p 依赖b,b依赖a,b中以通配符形式排除所有包后,
在项目p中通过mvn查看依赖树已经排除了a
但通过maven-assembly-plugin插件(版本2.x)打完的包中仍然包含了a.jar
查看官方文档,记录了此bug,即:assembly低版本(3.1.1之前版本),使用通配符排除的包依然会被打进最终的包中。
https://blogs.apache.org/maven/entry/apache-maven-assembly-plugin-version
可通过升级assembly版本为3.1.1解决。