実行時ファイル追加による動的クラスパス変更
実行時に Java クラスパスにファイルを追加することは、デバッグまたはデプロイメントのテクニックとして役立つ場合があります。ターゲット ファイルが jar であるかどうかに関係なく、既存のファイルを変更されたバージョンと交換できる機能により、柔軟性が大幅に向上します。
このクエリに答えるには、Java クラスパスは通常、ディレクトリまたは jar で構成されていることに注意することが重要です。ファイル。個々のクラス ファイルについては、適切なフォルダー構造内に配置する必要があります。
ハックによる実行時クラスパスの変更
特に単一のクラス ファイルを追加する必要がある場合は、回避策が存在します:
<code class="java">import java.io.IOException; import java.io.File; import java.net.URLClassLoader; import java.net.URL; import java.lang.reflect.Method; public class ClassPathHacker { private static final Class[] parameters = new Class[]{URL.class}; public static void addFile(String s) throws IOException { File f = new File(s); addFile(f); }//end method public static void addFile(File f) throws IOException { addURL(f.toURL()); }//end method public static void addURL(URL u) throws IOException { URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class sysclass = URLClassLoader.class; try { Method method = sysclass.getDeclaredMethod("addURL", parameters); method.setAccessible(true); method.invoke(sysloader, new Object[]{u}); } catch (Throwable t) { t.printStackTrace(); throw new IOException("Error, could not add URL to system classloader"); }//end try catch }//end method }//end class</code>
この回避策では、リフレクションを使用して保護されたメソッドを呼び出すことにより、システム クラス ローダーにファイルを追加できます。ただし、このアプローチは SecurityManager を使用する環境には適用できない場合があります。
以上が実行時にファイルを Java クラスパスに動的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。