# Eclipse Plugin ClassLoader



## CSHW89 (26. Mrz 2020)

Hallo zusammen,

kennt sich vielleicht jemand mit dem PluginFramework von Eclipse aus? Speziell geht es darum den ClassLoader meines Plugins zu überschreiben, damit ich Klassen aus einer jar-Datei zur Laufzeit laden kann. Versucht habe ich erstmal naiv:

```
public class MyActivator extends AbstractUIPlugin {
    public MyActivator() {
        ClassLoader loader;
        try {
            loader = new URLClassLoader(
                    new URL[] {new File("MyJarFile.jar").toURI().toURL()},
                    this.getClass().getClassLoader()
            );
            Thread.currentThread().setContextClassLoader(loader);
            // loader.loadClass("mypackage.MyClassInJar");  // hier funktioniert es
        } catch (MalformedURLException|ClassNotFoundException  e) {
            e.printStackTrace();
        }
    }
  
    public static AbstractUIPlugin getDefault() {
        return new MyActivator();
    }
}
```
In einer anderen Klasse meines Plugins möchte ich dann eine Klasse der jar-Datei benutzen (bzw. in einem eigenen Editor):

```
public class MyEditor extends ExtensionBasedTextEditor implements ITextEditor {
    public MyEditor() {
        mypackage.MyClassInJar object = new mypackage.MyClassInJar()  // hier wird der URLClassLoader nicht verwendet
    }
}
```
Der URLClassLoader wird aber nicht aufgerufen. Überprüft habe ich es mit einer erweiterten URLClassLoader-Klasse und debugger.

Falls sich jemand fragt, wozu: Ich möchte in jedem Eclipse-Projekt, welches mein Plugin benutzt, einstellen können, welche Version der jar-Datei benutzt wird. D.h. im Projekt wird die jar-Datei ausgewählt und der Editor in meinem Plugin soll dann genau diese jar-Datei benutzen. Die jar-Datei im Runtime-Classpath des Plugin hinzuzufügen, ist also keine Option.

Weiß jemand, wie ich den ClassLoader ändere, oder hat vielleicht eine andere Idee?

Vielen Dank!


----------

