对第三方库使用 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
取决于 bar
和 boo
;两者都取决于 baz
的不同版本)
问题是,bar
和 boo
不能使用不同版本的 baz
。
在我们的项目中,我们不直接依赖 baz
,但我们确实依赖 bar
和 boo
.
我的同事说我们可以使用 Maven 的遮蔽插件来遮蔽 baz:1.1.1
或 baz:2.2.2
以使其工作,但这听起来不合逻辑,因为它必须工作修改 bar
或 boo
的 class 个文件中的签名。令人惊讶的是,他确实设法克服了他一直在使用阴影处理的 NoSuchMethodError
,老实说,我不太确定如何..
那么,阴影是否真的会影响第三方库而不仅仅是我自己的代码?
还有,如果不行,有没有办法解决上面的冲突?
问得好。试图在 foo 中隐藏 baz 是行不通的,因为 Maven 只会选择两个 baz 依赖项之一。
阴影(带重定位)baz 会很奇怪,因为会有新的 类 bar 或 boo 无法识别。
我会尝试用 foo、bar-shaded 和 boo-shaded 设置一个多模块项目。对于 foo 添加对这些模块的依赖。
确保baz的relocations不同
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
取决于 bar
和 boo
;两者都取决于 baz
的不同版本)
问题是,bar
和 boo
不能使用不同版本的 baz
。
在我们的项目中,我们不直接依赖 baz
,但我们确实依赖 bar
和 boo
.
我的同事说我们可以使用 Maven 的遮蔽插件来遮蔽 baz:1.1.1
或 baz:2.2.2
以使其工作,但这听起来不合逻辑,因为它必须工作修改 bar
或 boo
的 class 个文件中的签名。令人惊讶的是,他确实设法克服了他一直在使用阴影处理的 NoSuchMethodError
,老实说,我不太确定如何..
那么,阴影是否真的会影响第三方库而不仅仅是我自己的代码?
还有,如果不行,有没有办法解决上面的冲突?
问得好。试图在 foo 中隐藏 baz 是行不通的,因为 Maven 只会选择两个 baz 依赖项之一。 阴影(带重定位)baz 会很奇怪,因为会有新的 类 bar 或 boo 无法识别。 我会尝试用 foo、bar-shaded 和 boo-shaded 设置一个多模块项目。对于 foo 添加对这些模块的依赖。 确保baz的relocations不同