Java プロセス内から CLASSPATH を動的に変更する
バックグラウンド
動的操作を行う場合Clojure REPL のようなプログラミング環境では、多くの場合、ソース ファイルをロードするための追加の jar を含めるために CLASSPATH をリアルタイムで変更する必要があります。これは Java プロセス自体を通じて実現できるため、環境全体を再起動する必要がなくなります。
解決策
デフォルトの CLASSPATH は Java プロセス内で直接変更できません。代わりに、既存の CLASSPATH を拡張するカスタム ClassLoader を作成することが重要です。これは、次のように URLClassLoader クラスを通じて実現できます。
<code class="java">URL[] url = { new URL("file://foo") }; URLClassLoader loader = new URLClassLoader(url);</code>
高度なアプローチ
より堅牢なソリューションには、次の手順をお勧めします。
リフレクションを使用した代替方法
が想定されている場合JVM のシステム クラスローダーが URLClassLoader である場合、リフレクションを使用してシステム クラスパスを変更できます:
<code class="java">URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class }); method.setAccessible(true); method.invoke(classLoader, new Object[] { new File("conf").toURL() });</code>
これらの手法を使用することで、開発者は Java プロセス内で CLASSPATH を動的に変更し、追加のコードをシームレスにロードできるようになります。必要に応じてリソースを使用することもできます。
以上がJava プロセス内で CLASSPATH を動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。