【问题标题】:Mixing different versions of Java libraries混合不同版本的 Java 库
【发布时间】:2010-09-21 10:03:45
【问题描述】:

我的项目使用具有自己依赖项的 Java 库(例如 Hadoop、Jetty)。我最终得到相同依赖项的不同版本,例如 ant 1.4.5、1.4.6。我的项目可能要使用 ant 1.4.7。这是一个小例子,可能会因 HTTP Commons 等较大的依赖项而变得更加复杂。

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

【问题讨论】:

    标签: java dependencies


    【解决方案1】:

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

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

    简短的回答就是寻找最小的公分母。请记住,'endorsed' 目录是您的朋友——在管理冲突的依赖项时。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        JarJar 来救援!

        ant tak 1) 将许多 jar 打包到一个中,2) 允许您重命名类文件中的依赖项,从而加载同一库的两个版本!

        【讨论】:

        • 听起来很不错的 www
        【解决方案4】:

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

        当然,这意味着你必须改变你的构建过程,但你可能值得花点时间不要为此烦恼。

        【讨论】:

          【解决方案5】:

          如果您有源代码,请将所有内容一起编译。如果不这样做,不幸的是,您将不得不使用 javac 的 target 选项将源定位为最低公分母。只有在运行应用程序时出现实际问题时才需要这样做,只要 jvm 是当前版本就很少会出现问题(Java 对与旧版本的二进制兼容性非常严格)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-21
            • 2010-12-29
            • 2023-04-06
            • 2013-11-27
            相关资源
            最近更新 更多