Heim > Java > javaLernprogramm > Hauptteil

Wie füge ich zur Laufzeit dynamisch Dateien zum Java-Klassenpfad hinzu?

DDD
Freigeben: 2024-11-03 10:26:02
Original
488 Leute haben es durchsucht

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

Dynamische Klassenpfadänderung mit Hinzufügung von Laufzeitdateien

Das Hinzufügen einer Datei zum Java-Klassenpfad während der Laufzeit kann eine nützliche Debugging- oder Bereitstellungstechnik sein. Unabhängig davon, ob es sich bei der Zieldatei um eine JAR-Datei handelt oder nicht, kann die Möglichkeit, vorhandene Dateien durch geänderte Versionen auszutauschen, die Flexibilität erheblich erhöhen.

Um diese Frage zu beantworten, ist es wichtig zu beachten, dass der Java-Klassenpfad normalerweise aus Verzeichnissen oder JAR besteht Dateien. Für einzelne Klassendateien müssen diese in geeigneten Ordnerstrukturen abgelegt werden.

Laufzeit-Klassenpfadänderung mit einem Hack

Wenn Sie speziell eine einzelne Klassendatei hinzufügen müssen, Es gibt eine Problemumgehung:

<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>
Nach dem Login kopieren

Mit dieser Problemumgehung können Sie eine Datei zum Systemklassenlader hinzufügen, indem Sie eine geschützte Methode mithilfe von Reflektion aufrufen. Dieser Ansatz ist jedoch möglicherweise nicht in Umgebungen mit SecurityManagern anwendbar.

Das obige ist der detaillierte Inhalt vonWie füge ich zur Laufzeit dynamisch Dateien zum Java-Klassenpfad hinzu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage