2011-01-11 7 views
3

実行時にJARを動的にロードする必要があるプログラムがあります。私はこれを見て、URLClassLoaderを使用していますが、動作させる方法がわかりません。 JAR "openup.jar"は、プログラムと同じディレクトリにあります。URLClassLoaderを使用して動的にJARをロードしますか?

理想的私はその中に、個々のクラスを指定しなくても、このJARをロードできるようにしたいと思います。

+3

が重複する可能性に提示されている(http://stackoverflow.com/questions/60764/how-should-i-load-jars-dynamic-at-runtime) – dogbane

+0

「このJARを、その内部に何が入っているかを知ることなくロードしてください」という意味は?あなたはそれから正確に何をロードしたいですか? –

+0

なぜ内部に何が入っているのかわからずにジャーをロードしたいですか? zipファイルとして処理したいのですか、Javaクラスをロードすることに興味がありますか? – pgras

答えて

1

私は正常に使用:[?どうやって実行時に動的に瓶をロードする必要があります]

@SuppressWarnings("unchecked") 
public void addURL(URL u) throws IOException { 
    URLClassLoader sysLoader = (URLClassLoader) ThisClass.class.getClassLoader(); 
    URL urls[] = sysLoader.getURLs(); 
    for (int i = 0; i < urls.length; i++) { 
     if (urls[i].toString().equalsIgnoreCase(u.toString())) { 
      return; 
     } 
    } 
    Class sysclass = URLClassLoader.class; 
    try { 
     Method method = sysclass.getDeclaredMethod("addURL", parameters); 
     method.setAccessible(true); 
     method.invoke(sysLoader, new Object[] { u }); 
    } catch (Throwable t) { 
     throw new IOException("Error, could not add URL to system classloader"); 
    } 
} 

ほぼ同じソリューションが実際のHow should I load Jars dynamically at runtime?

+0

それは恐ろしいアイデアのように見えます。それは、何も保証されていない多くの前提を作ります:1.) 'ThisClass'のクラスローダーは' URLClassLoader'です。 2) 'URLClassLoader'クラスには' addURL'メソッドがあり、それは 'setAccessible()'を呼び出すことができます(つまり、セキュリティマネージャは実行されておらず、禁止されています)。 –

+1

はい、それは本当ですが、私の場合はうまくいきます。より洗練されたソリューションがありますか? – morja

+0

Morjaさん、ありがとうございました*私はコードを正しく理解すれば、これは私が後にしたことをするかもしれませんが、そうでなければまだ答えがあったので、ありがとうございます。 – Myn

関連する問題