ホームページ  >  記事  >  Java  >  実行時にファイルを Java クラスパスに動的に追加するにはどうすればよいですか?

実行時にファイルを Java クラスパスに動的に追加するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-03 10:26:02489ブラウズ

How to Dynamically Add Files to the Java Classpath at Runtime?

実行時ファイル追加による動的クラスパス変更

実行時に 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 サイトの他の関連記事を参照してください。

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