[英]Transitive dependencies of a shaded JAR
我使用maven-shade插件打包myjar,并且有兴趣了解它在客户端maven项目引用时的行为方式
在maven环境中引用时,maven阴影jar是否会下载传递依赖项?
我是否能够将依赖项排除在由shade插件打包之外,并假设当客户端引用myjar并构建时它们将由maven下载?
需要的场景:1。从命令行执行myjar以显示AWT Forms对话框(将写出许可证文件)2。由客户端项目在标准maven中引用。 Maven应该过渡下载所有依赖项。
因此,为了满足场景1,我希望包含表单1.2.1的依赖项,但排除场景2期间客户端要下载的所有其他依赖项。
在maven环境中引用时,使用pom文件下载所有依赖项。 但是,如果您创建了一个内置所有依赖项的阴影jar(uber jar),它也可以在非maven(比如在项目中直接引用为jar)环境中使用,因为所有依赖项都已存在。
你的问题似乎与Shade插件无关。
是的,它将下载传递依赖项,只要这些依赖项在着色后位于最终的POM中。
是的我相信您可以有选择地打包一些依赖项并将其排除在最终的POM中。 但是我不建议你这样做。 我只建议使用shade插件
在JAR中有选择地打包一些依赖关系会破坏Maven的依赖管理机制。
更新为什么有选择地在JAR中打包依赖关系会破坏依赖关系管理:
例如,您正在开发依赖于bar-2.0
foo-1.0
。 现在你决定要在你的foo-1.0.jar
包含bar-2.0
类。
如果有人依赖你的foo-1.0
,并且他想使用bar-2.1
,他就会遇到麻烦:他的应用程序类路径将包含来自bar-2.0
(它是foo-1.0
一部分)的类和bar-2.1
(项目自行声明),你几乎无法预测代码使用的是哪个bar
。
因此,阴影插件的一个用例是遮蔽依赖关系,其中涉及包重命名(即我在原始答案中提到的阴影),而不是简单地直接在JAR中包含依赖关系。
Maven完全依赖于pom文件的内容 - 包括直接和传递依赖。 只要您的项目的pom声明正确的依赖项,客户端构建将按预期工作。 你使用shade插件创建jar的事实是无关紧要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.