変更されたファイルによる Java クラスパスの動的拡張
Java では、クラスパスは実行時にアプリケーションがアクセスできるディレクトリと JAR ファイルを定義します。クラスパス内のクラスを変更することは、動的な読み込みとコードの更新に不可欠な場合があります。この質問では、既存のクラス ファイルの変更されたコピーを実行時にクラスパスに追加する可能性について説明します。
解決策:
Java クラス ローダーではディレクトリを追加できます。またはJARファイル。ただし、個々のクラス ファイルを直接追加することはサポートされていません。この制限を回避するには、変更したクラス ファイルをサブディレクトリに配置し、そのディレクトリをクラスパスに追加します。
実装:
提供されている Java コード スニペットは、リフレクションを使用してファイルを SystemClassLoader に追加する代替アプローチ:
<code class="java">import java.io.File; import java.net.URL; import java.lang.reflect.Method; public class ClassPathHacker { public static void addFile(File f) { try { addURL(f.toURL()); } catch (IOException e) { e.printStackTrace(); } } public static void addURL(URL u) { URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Class sysclass = URLClassLoader.class; try { Method method = sysclass.getDeclaredMethod("addURL", URL.class); method.setAccessible(true); method.invoke(sysloader, u); } catch (Throwable t) { t.printStackTrace(); } } }</code>
このコードは、SystemClassLoader の保護されたメソッド addURL を反映して、変更されたクラス ファイルをクラスパスに動的に追加します。ただし、SecurityManager が存在する場合、このアプローチは失敗する可能性があることに注意してください。
以上が変更したクラスファイルを Java クラスパスに動的に追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。