为何Maven下载aws-java-sdk-bundle时会获取大量无关依赖?
问题解析与结论
核心原因:Maven依赖继承与仓库显示逻辑差异
mvnrepository的“无依赖”是狭义展示
它仅列出该构件自身直接声明的依赖,而AWS SDK Bundle的所有基础依赖都是通过继承父POM(aws-java-sdk-parent)引入的,这些继承来的依赖不会在mvnrepository的主依赖列表里显示,所以你看到“无编译/提供/运行时依赖”的结果。dependency:get命令的行为逻辑
即使添加-Dtransitive=false,该命令仍会解析并下载构件POM中直接包含(包括继承自父POM)的依赖。你看到的asm、commons-cli等,都是父POM中声明的基础依赖,属于该Bundle的直接依赖范畴,而非“依赖的依赖”——-Dtransitive=false仅控制是否下载传递依赖(即直接依赖的依赖),所以对这些直接依赖无效,加不加参数结果自然一致。AWS SDK Bundle的本质
它是一个Shaded胖包:所有依赖的类已经被打包到自身的JAR文件中。实际在项目中引入这个Bundle时,Maven不会自动传递引入这些依赖,你完全不需要手动处理下载下来的额外JAR,只需要引用aws-java-sdk-bundle-1.11.901.jar即可。
如何仅下载Bundle的JAR文件
如果只想获取这个胖包本身,跳过所有依赖下载,可以直接指定构件类型为jar并排除所有依赖:
./mvn dependency:get -Dartifact=com.amazonaws:aws-java-sdk-bundle:1.11.901:jar -Dexcludes=*
内容的提问来源于stack exchange,提问作者JoyfulPanda
相关产品推荐
相关产品推荐

