私は多くの検索を行いましたが、この質問に対する答えは見つかりませんでした。たぶん、これは行われますが、ここではSomeLibrary-V1.jarに私ははA.jarは(間接的に)依存ではA.jarがSomeLibrary-V2.jar 異なるクラスに使用されるjarファイルの2つのバージョンが必要です
- を持っているものだことはできません。
と私ははA.jarからV1クラスまたはクラスを取得するためにV2
- はA.jarが欲しいです必要に応じて。
私は自分でchild-first classloaderと書くことができ、必要に応じてClass1を名前で読み込むことができます。このクラスローダーはSomeLibrary-V1.jarを最初に(親クラスローダーの前に)検索します。ただし、Class1のクラスローダーは、クラスローダーに設定されません。これは、そのクラスローダーが親クラスに遅延するためです。これは、Class1がSomeLibrary-V1.jarから来たいクラスをロードしようとすると、私の子クラスローダーが使用されないことを意味します。
Class1クラスのクラスローダーとして設定する必要があると思います。クラスローダーをクラスローダーインスタンスに設定するためにイントロスペクションを見ましたが、クラスオブジェクトのclassLoaderフィールドは公開されていません。別の方法は、私のクラスローダーからdefinedClass()を呼び出すことですが、実際には両親を使用することはできません。
私はthisを見ましたが、そこにはクラスローダーの作成が示唆されていますが、詳細は記載されていません。私はその解決策に関する追加の質問/問題を呼び出すいくつかの詳細をここに示しました(私は望みます - コメントを追加する担当者はいません)。
私はここで何かを逃してくれることを願っています。助けてくれてありがとう。
「Java Classloader - 異なるバージョンのjarを参照する方法」の複製が可能です。(http://stackoverflow.com/questions/1553567/java-classloader-how-to-reference-different-versions-of-a- jar) – Ferrybig
ここで問題を動機づけるだけです。私はRESTfulなサービスを構築しており、Sparkを使っていくつかの機能を追加する必要がありました。 SparkはJersey 1.xを使用し、Jersey 2.xを使用してパスを開始しました。 –