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

标签 java maven maven-shade-plugin

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 的 shade 插件来遮蔽 baz:1.1.1baz:2.2.2 以使其工作,但它不起作用这听起来不合逻辑,因为要让它工作,它必须修改 barboo 类文件中的签名。令人惊讶的是,他确实设法解决了他一直在使用阴影处理的 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/

相关文章:

java - 正则表达式: Replace except from specific characters and whitespace

java - mvn java :exec with increased memory

java - 使用linux shell中的可执行文件从java中的maven项目读取.txt文件

java - PackProtocolException : invalid advertisement when using the jgitflow-maven-plugin withing a jenkins job

java - Maven - 有没有办法轻松创建一个 'uber' jar 并重新定位所有依赖项?

java - maven-shade-plugin:排除依赖项及其所有传递依赖项

java - eclipse 没有对 CTRL + Space 提供任何帮助

java - Spring Integration - 如何以编程方式使用 uri 参数/url 表达式?

java - Play Framework 2.3.x ByteChunks MP3 streaming 没有 Play ,在浏览器中不是 'scrollable'