ホームページ  >  記事  >  Java  >  実行中の Java プロセス内でクラスパスを動的に変更するにはどうすればよいですか?

実行中の Java プロセス内でクラスパスを動的に変更するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-26 12:34:29361ブラウズ

How Can You Dynamically Modify the Classpath Within a Running Java Process?

Java プロセス内の動的クラスパス変更

クラス ファイルやその他のリソースの検索パスを定義する Java クラスパスは、特定の Java プロセスに対して動的に変更されます。この機能は、プロセスを再起動せずにクラスパスに追加の jar を追加する必要がある Clojure REPL などの環境で作業する場合に特に役立ちます。

システム クラスパスを変更することは可能ですが、このアプローチは変更できません。ポータブルであり、保証がありません。代わりに、Java のクラスローダーの階層構造に準拠した新しいクラスローダーを定義することをお勧めします。具体的には、クラス X を参照するクラスはすべて、X と同じクラスローダーまたは子クラスローダーにロードされる必要があります。

1 つの方法は、親 ClassLoader の URL に存在しない URL を使用して URLClassLoader を作成することです。これは、次のコードを使用して実行できます:

<code class="java">URL[] url={new URL("file://foo")};
URLClassLoader loader = new URLClassLoader(url);</code>

別のアプローチには、現在のスレッドの ClassLoader を変更し、リフレクションを使用して目的の URL をシステム ClassLoader (URLClassLoader であると仮定) に追加することが含まれます。

<code class="java">ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { new File("mtFile").toURL() }, currentThreadClassLoader);
Thread.currentThread().setContextClassLoader(urlClassLoader);</code>

最後に、Java 9 以降では、Java エージェントでインストルメンテーション API を使用して、jar ファイルをクラスパスに追加する必要があることに注意することが重要です。これを実現するには、Launcher-Agent-Class 属性を jar ファイルのマニフェストに追加して、埋め込みエージェントを起動します。

以上が実行中の Java プロセス内でクラスパスを動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。