在maven项目中使用两个版本的番石榴

时间:2017-05-17 20:18:37

标签: java maven dependencies guava netapp

我有一个使用第三方库的项目(netapp nmsdk包,但这并不相关)。该库似乎使用guava r08,并专门调用 com.google.commons.io.NullPointerStream 。问题是在r15之后删除了类。除了困难之外,库似乎并不知道它的依赖性,因此我们必须在项目中手动包含guava r08,以便应用程序在运行时找到类。

现在,我们在几个地方使用番石榴,但不幸的是我们需要在较新版本的番石榴中找到的功能。因此,稍后在我们的项目管道堆栈中,无论如何,我们引用当前版本的r21。

但是maven排除了r08的瞬态依赖关系而不支持r21,所以现在我们在运行时没有所需的类!

我试图让阴影起作用,但由于它似乎没有引入r08中的类,所以没有什么可以遮蔽。

有人可以帮我弄清楚如何在r08中“包含”所需的瞬态文件以及对r21的显式依赖。或者,如果我走错了路,我能否以正确的方式获得路线? 谢谢!

编辑:我想明确声明第三方库似乎不是一个正确的maven工件,而且是我们无法访问的完全封闭的源。

编辑2:好的,所以我早些时候撒谎,实际上是三个项目(很好,你抓住了我,有12个,但只有3个问题)。

  • 第三方库需要Guavar08并在运行时抛出ClassNotFound异常。第三方库没有瞬态依赖或包含依赖。
  • Project-A使用第三方库,并有guava r08,因此第三方可以在运行时找到它。
  • Project-B使用Project-A和Guava 21。
  • Project-C使用Project-A,Project-B并且本身不使用Guava。
  • 胖罐是根据Project-C的配置文件构建的。

0 个答案:

没有答案