Hallo zusammen.
Ich habe folgendes Problem.
Ich möchte ein kleines Plugin System erstellen.
Dazu habe ich ein Interface "Plugin" erstellt. Dieses Interface wird von einem Plugin implementiert.
Das Plugin ist in einer jar Datei. Geladen wird das Plugin mit dem Classloader.
In einer normalen Java Anwendung funktioniert das auch.
Lasse ich das ganze aber in einer Web Anwendung laufen, bekomme ich eine ClassNotFoundException, dass die Klasse "Plugin", also mein Interface, nicht gefunden wird.
Die jar Datei und deren Klassen werden gefunden. Nur das "Plugin" Interface nicht.
Ich hoffe ihr könnte mir helfen
Ich habe folgendes Problem.
Ich möchte ein kleines Plugin System erstellen.
Dazu habe ich ein Interface "Plugin" erstellt. Dieses Interface wird von einem Plugin implementiert.
Das Plugin ist in einer jar Datei. Geladen wird das Plugin mit dem Classloader.
In einer normalen Java Anwendung funktioniert das auch.
Lasse ich das ganze aber in einer Web Anwendung laufen, bekomme ich eine ClassNotFoundException, dass die Klasse "Plugin", also mein Interface, nicht gefunden wird.
Java:
private List<Plugin> getPlugins(final File file) {
List<Plugin> plugins = new ArrayList<Plugin>();
JarInputStream input = null;
try {
input = new JarInputStream(new FileInputStream(file));
JarEntry entry = null;
while ((entry = input.getNextJarEntry()) != null) {
String name = entry.getName();
if (name.endsWith(".class")) {
name = name.substring(0, name.length() - 6);
name = name.replace("/", ".");
URL url = file.toURI().toURL();
URLClassLoader loader = new URLClassLoader(new URL[] { url });
final Class pluginClass = loader.loadClass(name);
Class[] interfaces = pluginClass.getInterfaces();
if (interfaces != null) {
for (Class interfaceClass : interfaces) {
if (interfaceClass.getName()
.equals(Plugin.class.getName())) {
Plugin plugin= (Plugin)pluginClass.newInstance();
plugins.add(widget);
}
}
}
}
}
} catch (..) {
} finally {
if (input != null) {
try {
input.close();
} catch (..) {
}
}
}
return plugins;
}
Die jar Datei und deren Klassen werden gefunden. Nur das "Plugin" Interface nicht.
Ich hoffe ihr könnte mir helfen