繁体   English   中英

着色JAR的传递依赖性

[英]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插件无关。

  1. 是的,它将下载传递依赖项,只要这些依赖项在着色后位于最终的POM中。

  2. 是的我相信您可以有选择地打包一些依赖项并将其排除在最终的POM中。 但是我不建议你这样做。 我只建议使用shade插件

    1. 创建UBER jar用于部署或
    2. 您真正想要保留项目内部的阴影依赖项。

    在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM