Java 使用Maven';第三方库的shade插件? TL;DR版本

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,而是依赖于

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
,而是依赖于
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。