2016-05-16 7 views
0

javaプロジェクトのコードを分析しようとしています。 私は、insertClassPath関数を使用してjavassistパスに追加するjarファイルで解析するプロジェクトを持っています。プロジェクトのクラスフォームにアクセスしようとすると、すべてうまく動作します。 問題は、プロジェクトで使用するライブラリのクラスにもアクセスする必要があることです。javassistでライブラリjarsをロードする

私はプロジェクトのjarと同じようにライブラリをクラスパスに追加しようとしましたが、NotFoundExceptionが発生するので正しいパスを与えていないと思います。

コードは次のようになります。

String jarFileName = "C:/Users/diana/Desktop/Test/ckjm.jar"; 
ClassPool pool = ClassPool.getDefault(); 
    try{ 
     pool.insertClassPath(jarFileName); 
     pool.insertClassPath("C:/Users/diana/Desktop/Test/ckjm/lib/bcel-5.2.jar"); 
    } catch (NotFoundException e) { 
     System.out.println("error loading jar!!"); 
    } 

私はテスト目的でharcoded文字列を使用していました。 jarファイルは、libフォルダまたはjarにアーカイブされたプロジェクトにあります。 別のjarファイルに含まれているjarファイルをどのように追加すればよいか分かりません。

注:私は(:「C:/Users/diana/Desktop/Test/bcel-5.2.jar」などのパスを与える)別のjarファイルとしてライブラリを続けるならば、それは罰金

を中華鍋すべてのヘルプターゲットJARは、別のJAR内にある場合は、JARのJarURLConnection URLパスを使用して定義されURLClassLoaderを使用して作成したLoaderClassPathを使用することができます

答えて

0

いただければ幸いです。

だから、別のJAR内に埋め込まれ、 inner.jar、あなたがターゲットJARを持っていると仮定し、C:/Users/diana/outer.jar

というサブディレクトリにあるとします。

外部JARのURLはとなります。/ C:/Users/diana/outer.jar

内部JARのURLは、jar:file:/ C:/Users/diana/outer.jar!/lib/inner.jarとなります。このクラスパスをロードする

あなたのコードは次のようになります。

URL cpUrl = new URL("jar:file:/C:/Users/diana/outer.jar!/lib/inner.jar"); 
URLClassLoader cpUrlLoader = new URLClassLoader(new URL[]{cpUrl}); 
pool.insertClassPath(new LoaderClassPath(cpUrlLoader)); 
+0

私はこれを試してみましたが、それでも私はjarファイルからクラスにアクセスすることはできません。 insertClassPath関数は例外をスローしませんが、pool.get(className)を使用してクラスにアクセスしようとすると、NotFoundExceptionが返されます –

関連する問題