混合不同版本的Java库

时间:2008-11-08 03:45:50

标签: java dependencies

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

如何让所有库和依赖项都发挥得更好?有没有办法隔离每个库(Hadoop,Jetty),以便它们只使用它们的依赖项?

5 个答案:

答案 0 :(得分:2)

您可以选择使用依赖性管理框架(如OSGI)管理所有这些内容。看一下spring框架动态模块http://www.springsource.org/osgi

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

简短的回答就是寻求最低的共同点。请记住,'endorsed'目录是您的朋友 - 在管理冲突的依赖项时。

答案 1 :(得分:2)

Maven通常也能很好地处理这个问题。如果不完全,它将至少处理它的大部分,然后你可以解决遗留的问题。

当然,这意味着你必须改变你的构建过程,但是不要因为没有把头发拉出来而值得花时间。

答案 2 :(得分:2)

JarJar救援!

一个ant任务,1)将许多jar包装成一个,2)允许你重命名类文件中的依赖项,从而加载同一个库的两个版本!

答案 3 :(得分:1)

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

答案 4 :(得分:0)

J G提到了OSGi,这是我在阅读这个问题时的第一个想法。

拥有相同库的多个版本是OSGi的一个重点。 如果我们已经提到了一些第三方产品,我认为公平地提及它背后的规范。

您可以从官方osgi网站http://osgi.org

获取