# Class dynamisch nachladen ohne extra ClassLoader



## mrno (1. April 2008)

Guten Tag alle zusammen,
ich lade gerade meine Plugins über folgenden Code:

```
URL jarURL = new File("/home/home/TTTLogPlugin.jar").toURL();
			
			ClassLoader classLoader=new URLClassLoader(new URL[]{jarURL});
			
				try {
					Class classes = classLoader.loadClass("console.Console");
					Object o = classes.newInstance();
					System.out.println("test");
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
//			}
```

Mein Problem ist das die Plugins nicht nur aus einer Classe aus benutzt werden sondern aus mehreren. Damit ich nicht jedesmal den ClassLoader übergeben muss, ist meine Frage ob ich nicht den ClassLoader des Programmes um den Pfad der Plugins erweitern kann? Damit müsste ich keinen ClassLoader mehr übergeben. Geht sowas? Gibt es sowas überhaupt? Hoffe ihr könnt mir helfen.


----------



## zeja (2. April 2008)

Bitte benutz toURI().toURL() toURL ist fehlerhaft.

Also es gibt eine Methode, die ist allerdings nicht unbedingt toll: Du kannst die Klassen in ein byte Array einlesen, dir den Hautpclassloader holen und mit defineClass und resolveClass die Klasse aus dem byte Array hinzufügen.

Schöner ist doch aber ein PluginManager an dem es statische Methoden wie "registerPlugin(File)" und getPluginClassLoader gibt. Dann brauchst du den auch nicht mit übergeben sondern kannst den ClassLoader so von überall aus anfragen wenn du ihn brauchst. In der registerPlugin fügst du einem vorhandenen URLClassLoader neue Plugins mit addURL hinzu.


----------

