如何知道在Maven中遮蔽哪个包?



当一个库发布时,作者通常会提供Maven/Gradle依赖项。如果库需要被遮蔽,他们也会为遮蔽插件指定相关的包:

<relocation>
<pattern>com.github.stefvanschie.inventoryframework</pattern>                       
<shadedPattern>${shade.base}.inventoryframework</shadedPattern>
</relocation>

但是如果他们没有呢?对于许多依赖项,我必须在github页面上搜索top包,这当然可能是错误的。在这种情况下我该怎么办?

  • 如果从帖子不清楚,我需要创建一个独立的jar(特定系统的插件),其中包含我的依赖关系,以在运行时明显避免ClassNotFoundException

事实是,你"通常"不要遮蔽你的依赖。这就是为什么通常不提供有关这方面的信息,您可以自己判断。

实际上很少有遮阳的理由。

如果您构建一个独立的JAR,并且您发现在您的传递依赖关系中存在冲突,您首先尝试在没有阴影的情况下修复它:

  • 你在<dependencyManagement>中设置依赖的版本为某个新版本,并测试它是否有效。
  • 你可以通过自己写一些东西来减少项目的依赖。

只有当这不起作用时,你才开始着色。

注意:我说的是独立的jar。如果你的JAR作为一个插件运行在一个不同的类加载器的上下文中(与其他未知的插件一起),就像在Jenkins中一样,那么隐藏很多东西可能是值得的,并将依赖减少到绝对最低限度。

相关内容

  • 没有找到相关文章

最新更新