说我需要(必需)在我的Java项目中使用fizz-1.0.jar
和buzz-2.3.2.jar
。现在,fizz-1.0.jar
取决于foo-0.1.35.jar
,buzz-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.jar
和buzz-2.3.2.jar
都大量使用了Widget
的两个版本。
我不能盲目地将foo-x.y.z.jar
的两个版本添加到类路径中,因为首先加载的Widget
只适用于fizz-1.0.jar
或buzz-2.3.2.jar
。< / p>
我有什么选择?请记住我必须同时拥有fizz-1.0.jar
和buzz-2.3.2.jar
,并且必须满足他们所有的传递依赖。
答案 0 :(得分:1)
我建议您使用区分类加载的框架。 例如。 OSGi框架。然后你可以创建2个捆绑包 - 一个包含fizz实现,另一个包含buzz实现。它们都可以包含它们的依赖库,它们不再冲突,因为它们是从2个不同的类加载器加载的。
示例osgi容器或“Eclipse Equinox”和“Apache Felix”,但还有更多。
希望有所帮助。