0

假设我需要(它需要)在我的 Java 项目中使用fizz-1.0.jar和。buzz-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.jar大量buzz-2.3.2.jar使用了Widget.

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

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

4

1 回答 1

1

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

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

希望有帮助。

于 2013-05-29T12:47:55.670 回答