当一个库发布时,作者通常会提供Maven/Gradle依赖项。如果库需要被遮蔽,他们也会为遮蔽插件指定相关的包:
<relocation>
<pattern>com.github.stefvanschie.inventoryframework</pattern>
<shadedPattern>${shade.base}.inventoryframework</shadedPattern>
</relocation>
但是如果他们没有呢?对于许多依赖项,我必须在github页面上搜索top包,这当然可能是错误的。在这种情况下我该怎么办?
- 如果从帖子不清楚,我需要创建一个独立的jar(特定系统的插件),其中包含我的依赖关系,以在运行时明显避免
ClassNotFoundException
。
事实是,你"通常"不要遮蔽你的依赖。这就是为什么通常不提供有关这方面的信息,您可以自己判断。
实际上很少有遮阳的理由。
如果您构建一个独立的JAR,并且您发现在您的传递依赖关系中存在冲突,您首先尝试在没有阴影的情况下修复它:
- 你在
<dependencyManagement>
中设置依赖的版本为某个新版本,并测试它是否有效。 - 你可以通过自己写一些东西来减少项目的依赖。
只有当这不起作用时,你才开始着色。
注意:我说的是独立的jar。如果你的JAR作为一个插件运行在一个不同的类加载器的上下文中(与其他未知的插件一起),就像在Jenkins中一样,那么隐藏很多东西可能是值得的,并将依赖减少到绝对最低限度。