对第三方库使用 Maven 的阴影插件?

Using Maven's shade plugin for third party libraries?

TL;DR 版本

Maven 的 shade 插件会影响第三方库吗?

更长的版本

我和我的同事一直在争论使用 Maven 的 shade 插件来修复对第三方库的依赖性错误。我们有以下依赖层次结构:

foo (our project)
+--- bar:1.0.0
|    \--- baz:1.1.1
\--- boo:1.0.0
     \--- baz:2.2.2

(foo 取决于 barboo;两者都取决于 baz 的不同版本)

问题是,barboo 不能使用不同版本的 baz。 在我们的项目中,我们不直接依赖 baz,但我们确实依赖 barboo.

我的同事说我们可以使用 Maven 的遮蔽插件来遮蔽 baz:1.1.1baz:2.2.2 以使其工作,但这听起来不合逻辑,因为它必须工作修改 barboo 的 class 个文件中的签名。令人惊讶的是,他确实设法克服了他一直在使用阴影处理的 NoSuchMethodError,老实说,我不太确定如何..

那么,阴影是否真的会影响第三方库而不仅仅是我自己的代码?
还有,如果不行,有没有办法解决上面的冲突?

问得好。试图在 foo 中隐藏 baz 是行不通的,因为 Maven 只会选择两个 baz 依赖项之一。 阴影(带重定位)baz 会很奇怪,因为会有新的 类 bar 或 boo 无法识别。 我会尝试用 foo、bar-shaded 和 boo-shaded 设置一个多模块项目。对于 foo 添加对这些模块的依赖。 确保baz的relocations不同