Java 使用Maven';第三方库的shade插件? TL;DR版本
Maven的shade插件会影响第三方库吗 较长版本 我的同事和我一直在争论使用Maven的shade插件修复第三方库的依赖错误。我们有以下依赖关系层次结构:Java 使用Maven';第三方库的shade插件? TL;DR版本,java,maven,maven-shade-plugin,Java,Maven,Maven Shade Plugin,Maven的shade插件会影响第三方库吗 较长版本 我的同事和我一直在争论使用Maven的shade插件修复第三方库的依赖错误。我们有以下依赖关系层次结构: foo (our project) +--- bar:1.0.0 | \--- baz:1.1.1 \--- boo:1.0.0 \--- baz:2.2.2 (foo取决于bar和boo;两者都取决于不同版本的baz) 问题是,bar和boo不能使用不同版本的baz。 在我们的项目中,我们不直接依赖于baz,而是依赖于
foo (our project)
+--- bar:1.0.0
| \--- baz:1.1.1
\--- boo:1.0.0
\--- baz:2.2.2
(foo
取决于bar
和boo
;两者都取决于不同版本的baz
)
问题是,bar
和boo
不能使用不同版本的baz
。
在我们的项目中,我们不直接依赖于baz
,而是依赖于bar
和boo
我的同事说,我们可以使用Maven的shade插件对baz:1.1.1
或baz:2.2.2
进行着色,但这听起来不合逻辑,因为要使其工作,必须修改bar
或boo
类文件中的签名。但是令人惊讶的是,他确实成功地通过了他一直在处理的使用阴影的NoSuchMethodError
,老实说,我不太清楚如何
那么,shade真的会影响第三方库而不仅仅是我自己的代码吗?另外,如果没有,是否有办法解决上述冲突?好问题。试图在foo中隐藏baz是行不通的,因为Maven只会选择两个baz依赖项中的一个。 着色(带重定位)baz会很奇怪,因为会有bar或boo无法识别的新类。 我会尝试设置一个带有foo、bar和boo阴影的多模块项目。对于foo,在这些模块上添加依赖项。
确保baz的重新定位是不同的。因此,如果我做对了,我会为bar和boo创建一个新项目,在每个项目中我为baz(使用不同的位置,例如bar.baz和boo.baz)着色,然后让foo依赖于这些项目?但是,如果我不能控制酒吧和酒吧呢?那没关系。这些将是无来源的项目。带阴影的条形图将具有1个依赖项:条形图。将maven shade插件添加到pom中,例如将baz重新定位到baz1_1_1。