在第三方库中使用Maven的shade插件?

时间:2015-12-20 17:32:38

标签: java maven maven-shade-plugin

TL; DR版本

Maven的阴影插件可以影响第三方库吗?

更长的版本

我的同事和我一直在争论使用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的班级文件中的签名。令人惊讶的是,他确实设法通过NoSuchMethodError他正在处理使用阴影,并且说实话我不太确定如何...

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

1 个答案:

答案 0 :(得分:1)

好问题。试图在foo中遮蔽baz不会起作用,因为Maven将只选择两个baz依赖中的一个。 阴影(有重新安置)baz会很奇怪,因为会有一些新的课程,酒吧或者嘘声不会认出来。 我会尝试使用foo,bar-shaded和boo-shaded设置一个多模块项目。对于foo,在这些模块上添加依赖项。 确保baz的重新定位不同。