0

私の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.jarWidget次のようなクラスが含まれています。

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

ここでのオプションは何ですか? との両方が必要であり、推移的な依存関係をすべて満たさなければならないことを忘れないでください。fizz-1.0.jarbuzz-2.3.2.jar

4

1 に答える 1

1

クラスの負荷を区別するフレームワークを使用することをお勧めします。たとえば、OSGi フレームワーク。次に、2 つのバンドルを作成できます。1 つは fizz の実装で、もう 1 つは Buzz の実装です。どちらも、2 つの異なるクラス ローダーからロードされるため、競合しない依存ライブラリを含むことができます。

osgi コンテナーの例、または「Eclipse Equinox」と「Apache Felix」ですが、他にもあります。

それが役立つことを願っています。

于 2013-05-29T12:47:55.670 に答える