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