NoClassDefFoundError in Eclipse trotz vorhandenem Code
Die Freude beim Plugin-Entwickeln war riesengroß: Eclipse compiliert den Code der Plugins zwar fehlerfrei, meldet zur Laufzeit dann aber einen "java.lang.NoClassDefFoundError". Wie kann das sein - Übersetzen geht ja?
Meine Anwendung besteht aus mehreren Plugins, die teilweise voneinander abhängig sind. Die Abhängigkeiten sind korrekt definiert. Trotzdem: ein neu erstelltes Plugin enthält Code, der zur Laufzeit nicht gefunden werden kann. Code, der direkt im Plugin in Java-Dateien vorhanden ist und vom Compiler offenbar doch gefunden wird.
Um dem Leser dieser Zeilen meinen Leidensweg zu ersparen komm ich gleich zur Lösung, deren Findung mich und meine Kollegen einen halben Tag gekostet hat: Der "." war nicht im Classpath. In der Datei MANIFEST.MF des exportierenden Plug-Ins muss in der Zeile "Bundle-ClassPath:" eben auch ein Punkt stehen:
Voila: es geht wieder. Kein NoClassDefFoundError mehr.
Nachforschungen haben ergeben: Wenn man ein neues Projekt mittels Wizard erstellt und dabei ein Plug-In Projekt auswählt, wird der Punkt eingefügt. Ich ging leider den falschen Weg, und habe mittels PDE-Tools "Convert Projects into Plugin-Projects" ein normales Java-projekt in ein Eclipse-Projekt umgewandelt; was auch prinzipiell funktioniert, wenn man den einen Punkt nicht vergisst einzutragen.
Meine Anwendung besteht aus mehreren Plugins, die teilweise voneinander abhängig sind. Die Abhängigkeiten sind korrekt definiert. Trotzdem: ein neu erstelltes Plugin enthält Code, der zur Laufzeit nicht gefunden werden kann. Code, der direkt im Plugin in Java-Dateien vorhanden ist und vom Compiler offenbar doch gefunden wird.
Um dem Leser dieser Zeilen meinen Leidensweg zu ersparen komm ich gleich zur Lösung, deren Findung mich und meine Kollegen einen halben Tag gekostet hat: Der "." war nicht im Classpath. In der Datei MANIFEST.MF des exportierenden Plug-Ins muss in der Zeile "Bundle-ClassPath:" eben auch ein Punkt stehen:
Bundle-ClassPath: .
Voila: es geht wieder. Kein NoClassDefFoundError mehr.
Nachforschungen haben ergeben: Wenn man ein neues Projekt mittels Wizard erstellt und dabei ein Plug-In Projekt auswählt, wird der Punkt eingefügt. Ich ging leider den falschen Weg, und habe mittels PDE-Tools "Convert Projects into Plugin-Projects" ein normales Java-projekt in ein Eclipse-Projekt umgewandelt; was auch prinzipiell funktioniert, wenn man den einen Punkt nicht vergisst einzutragen.
Kommentare