如何管理所需的,冲突的Java依赖项

时间:2013-05-29 12:40:04

标签: java dll classloader dependency-management transitive-dependency

说我需要(必需)在我的Java项目中使用fizz-1.0.jarbuzz-2.3.2.jar。现在,fizz-1.0.jar取决于foo-0.1.35.jarbuzz-2.3.2.jar取决于foo-4.2.17.jar

foo-0.1.35.jar包含Widget类,如下所示:

public class Widget {
    public int doSomething(int x) {
        return x++;
    }
}

foo-4.2.17.jar包含经过严格修改的Widget版本:

public class Widget {
    public Meh makeStuff() {
        return new Meh();
    }
}

不幸的是,fizz-1.0.jarbuzz-2.3.2.jar都大量使用了Widget的两个版本。

我不能盲目地将foo-x.y.z.jar的两个版本添加到类路径中,因为首先加载的Widget只适用于fizz-1.0.jarbuzz-2.3.2.jar。< / p>

我有什么选择?请记住我必须同时拥有fizz-1.0.jarbuzz-2.3.2.jar,并且必须满足他们所有的传递依赖。

1 个答案:

答案 0 :(得分:1)

我建议您使用区分类加载的框架。 例如。 OSGi框架。然后你可以创建2个捆绑包 - 一个包含fizz实现,另一个包含buzz实现。它们都可以包含它们的依赖库,它们不再冲突,因为它们是从2个不同的类加载器加载的。

示例osgi容器或“Eclipse Equinox”和“Apache Felix”,但还有更多。

希望有所帮助。