2016-12-30 8 views
0

が見つかりません:Javaのクラスローダは、私は次を含むJARファイルを持って想定するリソース

ProgJar 

dir1 
    |dir1-1 
    |  |Class-1-1 
    |  |PClass1-1-2  Different file name from LibJar 
Pdir2 
    |PClass2-1 

ProgJarとLibJarの間だけで共有パッケージ構造は、 "DIR1/dir1-1/Class1-1-1" です。 Pの接頭辞が付いているものはすべてProgJar固有のもので、Lの接頭辞が付いているものはすべてLibJar固有のものです。

私はProjJarのライブラリとしてLibJarを使用しています。

これは私がProjJarで実行するコードの抜粋です:

ClassLoader clP = Pdir2.PClass2-1.class.getClassLoader(); 
ClassLoader clL = Ldir2.LClass2-1.class.getClassLoader(); 

URL u1 = clP.getResource("dir1/dir1-1"); 
URL u2 = clL.getResource("dir1/dir1-1"); 

System.out.printf(u1.toExternalForm()); 
System.out.printf(u2.toExternalForm()); 

私は、NetBeansでこれを実行すると、私は次のような出力が得られます。

Netbeans Output: 
jar:file:/C:/path/to/project/lib/LibJar.jar!/dir1/dir1-1 
jar:file:/C:/path/to/project/lib/LibJar.jar!/dir1/dir1-1 

構築されたとして、私はProgJarとして実行すると、 NetBeansの外の瓶は、私が手:私は見ることを期待何

Jar Output: 
jar:file:/C:/path/to/ProgJar/ProgJar.jar!/dir1/dir1-1 
jar:file:/C:/path/to/ProgJar/ProgJar.jar!/dir1/dir1-1 

は次のとおりです。

Netbeans Output: 
jar:file:/C:/path/to/project/build/classes/dir1/dir1-1 
jar:file:/C:/path/to/project/lib/LibJar.jar!/dir1/dir1-1 

Jar Output: 
jar:file:/C:/path/to/ProgJar/ProgJar.jar!/dir1/dir1-1 
jar:file:/C:/path/to/ProgJar/libs/LibJar.jar!/dir1/dir1-1 

は、私はいくつかの異なった記事を読んで、この1は、この特定の問題に多少関連すると思われる:

http://jeewanthad.blogspot.com/2014/02/how-to-solve-java-classpath-hell-with.html

どのように私は指定された出力を達成することができていますか?コードの下

答えて

0

は、あなたがそれを行うことを期待している何をしていません。

ClassLoader clP = Pdir2.PClass2-1.class.getClassLoader(); 
ClassLoader clL = Ldir2.LClass2-1.class.getClassLoader(); 

ここCLP AMD CLLを同じクラスローダインスタンス(あなたのシステム/アプリケーションクラスローダは、具体的には)検証.TOは、ちょうど(clP == clL)を参照しているはず真を返します。

あなたがしたいのは、カスタムクラスローダー(URLClassLoaderが行うべきこと)を使ってライブラリをロードすることです。次に、ProgJarとカスタムクラスローダーをロードしたシステムクラスローダーが異なります。残りのコードは期待どおりに動作するはずです。

+0

私はこれを試して報告します。 – MrJman006

+0

問題が進行しましたか? – code

+0

私はまだこれを試していない。私は今週それに着こうとします。 – MrJman006

関連する問題