【问题标题】:Using Maven's shade plugin for third party libraries?为第三方库使用 Maven 的阴影插件?
【发布时间】:2015-12-20 17:32:38
【问题描述】:

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,老实说我不太确定如何..

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

【问题讨论】:

    标签: java maven maven-shade-plugin


    【解决方案1】:

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

    【讨论】:

    • 所以如果我做对了,我会为 bar 和 boo 创建一个新项目,在每个项目中我为 baz 着色(使用不同的位置,例如 bar.baz 和 boo.baz)然后我让 foo 依赖这些项目?但是,如果我无法控制 bar 和 boo 怎么办?
    • 没关系。这些将是无源项目。 bar-shaded 将有 1 个依赖项:bar.将 maven-shade-plugin 添加到 pom 中,例如将 baz 重定位到 baz1_1_1。
    猜你喜欢
    • 2012-03-06
    • 2015-07-29
    • 1970-01-01
    • 2013-11-17
    • 2017-01-13
    • 2018-10-13
    • 2021-05-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多