2008-11-08 51 views
8

我的项目使用具有自己的依赖关系的Java库(例如Hadoop,Jetty)。我最终得到了不同版本的相同依赖,比如ant 1.4.5,1.4.6。我的项目可能要使用ant 1.4.7。这是一个很小的例子,如HTTP Commons这样的更大的依赖关系可能会变得更复杂。混合不同版本的Java库

如何让所有的库和依赖项发挥出色?有没有办法隔离每个库(Hadoop,Jetty),以便他们只使用它们的依赖关系?

回答

1

如果你有源代码,一起编译所有东西。如果你不这样做,不幸的是,你将不得不将目标选项定位到javac的最低公分母。如果运行应用程序时存在实际问题,则只需要执行此操作,只要jvm是当前版本(Java对旧版本的二进制兼容性非常严格),应用程序就不会存在。

2

您可以选择使用独立管理框架(如OSGI)来管理所有这些功能。看看弹簧框架动态模块http://www.springsource.org/osgi

您还可以看看Eclipse实现OSGI的框架部分。看看这里http://www.eclipse.org/osgi/

简短的答案只是去为最低的共同标准。记住'认可'目录是你的朋友 - 当涉及到管理冲突的依赖关系时。

2

Maven一般也会处理得很好。如果不是完全的话,它至少可以处理它的大部分内容,那么你可以理清剩下的问题。

当然,这意味着你必须改变你的构建过程,但它可能是值得的,因为不要把你的头发拉出来。

2

JarJar来救援!

一个蚂蚁既可以1)将许多jar包装成一个,2)可以重命名类文件中的依赖关系,从而加载同一个库的两个版本!

+0

听起来很花哨www – 2017-10-19 21:05:34

0

J G提到了OSGi,这甚至是我在读这个问题时首先想到的。

拥有同一个库的多个版本是OSGi的一个优点。 如果我们已经提到了一些第三方产品,我认为它也很重要。

你可以从官方的osgi网站获得它http://osgi.org