# NoClassDefFoundError Problem



## Krallistic (20. Jul 2010)

Ich habe 2 verschiedenliche (Eclipse)RCP Projecte. Nun möchte Project A in B verwenden.

In der Manifest von A habe ich B unter "Required-Bundle" hinzufügt. 

Während der Laufzeit b ei der ersten verwendung schmeißt er mir dann:

java.lang.NoClassDefFoundError:XYZ...

Was hab ich vergessen? Am Classpath muss ich ja eigentlich nichts maneul ändern...oder?

mfg


----------



## Sonecc (20. Jul 2010)

Run Configuration ist angepasst?


----------



## Krallistic (20. Jul 2010)

Ist unter dem Reiter Plugin gesetzt..
Benötige ich da noch weitere einstellungen?

mfg


----------



## Sonecc (20. Jul 2010)

Moment...



> Ich habe 2 verschiedenliche (Eclipse)RCP Projecte


Sind wirklich beides RCP Anwendungen?

Ich bin mir nicht sicher, ob das so geht, zumindest eins von beidem sollte wohl ein Plugin sein.

Ansonsten, poste mal die komplette Fehlermeldung, so kann man da wenig sagen


----------



## Krallistic (20. Jul 2010)

Ich dachte Plugins für Eclipse basieren immer auf RCP? Wenn nicht dann hab ich mich falsch ausgedrückt dann währen es beide nur plugins...Sorry

```
java.lang.NoClassDefFoundError: X/Z/Y
	at org.neontoolkit.plugin.ReductionAction.run(ReductionAction.java:73)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: java.lang.ClassNotFoundException: X/Y/Z
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
```

mfg & Danke


----------



## Wildcard (20. Jul 2010)

> ReductionAction.java:73


Was tut Zeile 73 in ReductionAction denn? Vielleicht liegt dort das Problem. Wenn ich raten müsste: du hast in einem der plugins den Build Path händisch angepasst um eine Bibliothek einzubinden.


----------



## Krallistic (20. Jul 2010)

> Was tut Zeile 73 in ReductionAction denn?


Ist der erste Aufruf einer Funktionalität aus dem anderen Project.



> Wenn ich raten müsste: du hast in einem der plugins den Build Path händisch angepasst um eine Bibliothek einzubinden.



Nein habe ich nicht. Ich habe:

-Das andere Project in dem Aktuellen in der manifest unter "Required-Bundle" eingefügt.
-Die RunConfiguration in Eclipse so angepasst das auch beide Plugins geladen werden.

mfg


----------



## Wildcard (20. Jul 2010)

Krallistic hat gesagt.:


> Ist der erste Aufruf einer Funktionalität aus dem anderen Project.


Du hast das Projekt selbst hoffentlich nicht als Dependency eingetragen, sondern referenzierst das Projekt *nur* über require-bundle?


----------



## Krallistic (20. Jul 2010)

Wenn ich es in die Manifest eintrage wird es bei mir automatisch als Dependency eingetragen?


----------



## Daniel_L (20. Jul 2010)

Tritt das Problem generell oder nur unter Linux auf?


----------



## Wildcard (20. Jul 2010)

Krallistic hat gesagt.:


> Wenn ich es in die Manifest eintrage wird es bei mir automatisch als Dependency eingetragen?


Nur das Manifest zählt zur Laufzeit. Alles andere, Build-Path ändern, Projekt als Dependency eintragen,... zählt zu 'händisch den Build Path ändern' und das ist verboten.


----------



## Gast2 (21. Jul 2010)

Eventuell vergessen das Plugin im feature bzw. product aufzunehmen


----------



## Krallistic (23. Jul 2010)

> Alles andere, Build-Path ändern, Projekt als Dependency eintragen,... zählt zu 'händisch den Build Path ändern' und das ist verboten.



Hattest Recht das Project war im Build-Path von einer Eclipse Funktion eingetragen(rmt->PDE Tools->Update Classpath). Hab es jetzt daraus entfernt...

Jetzt steht es nur noch im Manifest unter "required-bundel"... Habe jedoch immer noch das gleiche Problem wie am Anfang (NoClassDefFound) 



> Eventuell vergessen das Plugin im feature bzw. product aufzunehmen


?

mfg & Danke


----------



## Wildcard (23. Jul 2010)

Verwendest du Reflection, oder steht die Klasse die nicht gefunden wird im Quellcode? Wenn letzteres der Fall ist musst du schon einen Compile Fehler bekommen wenn die Klasse nicht sichtbar ist, nicht erst einen Laufzeitfehler. Wenn das aus irgendeinem Grund nicht der Fall ist, ist der Java Build Path nicht identisch mit dem was dir PDE zur Verfügung stellt und das passiert normalerweise nur wenn du irgendwelche Bibliotheken oder Projekte in den Build Path einträgst.


----------



## Krallistic (24. Jul 2010)

> Verwendest du Reflection


Nein


> Wenn letzteres der Fall ist musst du schon einen Compile Fehler bekommen


Bekomme erst zur Laufzeit den Error



> irgendwelche Bibliotheken oder Projekte in den Build Path einträgst


Hatte noch 2 Bibs eingetragen. Hab aber jetzt dafür gesorgt das diese von PDE eingetragen würden...
Hab jetzt keine eigenen Änderungen am Build Path gemacht sondern alle automatisch generieren lassen.

Jedoch besteht das Problem weiterhin.


----------



## Wildcard (24. Jul 2010)

Hast du schonmal im plugins Tab der Launch Configuration auf validate geklickt?
Möglich das ein Bundle fehlt, allerdings sollte dein Bundle dann überhaupt nicht starten.
Wenn es daran nicht liegt, poste das log deiner Runtime Application (im runtime workspace /.metadata/.log)


----------



## Krallistic (24. Jul 2010)

> Hast du schonmal im plugins Tab der Launch Configuration auf validate geklickt?



Ja , ist alles i.O.



> poste das log deiner Runtime Application




```
!SESSION 2010-07-24 12:00:11.000 -----------------------------------------------
eclipse.buildId=I20100608-0911
java.version=1.6.0_20
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments:  -product org.eclipse.platform.ide
Command-line arguments:  -product org.eclipse.platform.ide -data C:\Users\Krallistic\workspace/../runtime-EclipseApplication -dev file:C:/Users/Krallistic/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86

!ENTRY org.eclipse.ui.workbench 2 0 2010-07-24 12:00:16.893
!MESSAGE A handler conflict occurred.  This may disable some commands.
!SUBENTRY 1 org.eclipse.ui.workbench 2 0 2010-07-24 12:00:16.893
!MESSAGE Conflict for 'AUTOGEN:::org.eclipse.ui.cheatsheets.actionSet/org.eclipse.ui.cheatsheets.actions.CheatSheetHelpMenuAction':
HandlerActivation(commandId=AUTOGEN:::org.eclipse.ui.cheatsheets.actionSet/org.eclipse.ui.cheatsheets.actions.CheatSheetHelpMenuAction,
	handler=ActionDelegateHandlerProxy(null,org.eclipse.ui.cheatsheets.CheatSheetExtensionFactory:helpMenuAction),
	expression=AndExpression(ActionSetExpression(org.eclipse.ui.cheatsheets.actionSet,org.eclipse.ui.internal.WorkbenchWindow@690247),WorkbenchWindowExpression(org.eclipse.ui.internal.WorkbenchWindow@690247)),sourcePriority=16640)
HandlerActivation(commandId=AUTOGEN:::org.eclipse.ui.cheatsheets.actionSet/org.eclipse.ui.cheatsheets.actions.CheatSheetHelpMenuAction,
	handler=ActionDelegateHandlerProxy(null,org.eclipse.ui.cheatsheets.CheatSheetExtensionFactory:helpMenuAction),
	expression=AndExpression(ActionSetExpression(org.eclipse.ui.cheatsheets.actionSet,org.eclipse.ui.internal.WorkbenchWindow@690247),WorkbenchWindowExpression(org.eclipse.ui.internal.WorkbenchWindow@690247)),sourcePriority=16640)

!ENTRY org.eclipse.ui 4 0 2010-07-24 12:00:22.979
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NoClassDefFoundError: x/y/z
	at org.neontoolkit.plugin.ReductionAction.run(ReductionAction.java:73)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: java.lang.ClassNotFoundException: x.y.z
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 30 more
```

Kommt wenn ich es nur starte und dann sofort die Funktion aufrufe die das 2te Project benötigt.
(Die Handler Warnings kann man ignorieren das ist noch eien andere Baustelle...)

mfg


----------



## Wildcard (24. Jul 2010)

Dann kann ich dir leider nicht mehr dazu sagen.
Wenn du das Bundle mit X/Y/Z per require-bundle eingebunden hast und dieses Bundle das Package X/Y exportiert, oder wenn du X/Y per import-package importierst, dann stellt OSGi sicher das dein Bundle gar nicht aktiviert werden kann wenn die Abhängigkeit nicht erfüllt werden kann.
Der typischen Fehler sind irgendwelche nested jars oder ein händisch angepasster Buildpath. Wenn du das bei dir definitiv ausschließen kannst, kann ich dir von hier aus nicht weiterhelfen.


----------



## Krallistic (25. Jul 2010)

> nested jars



Das zu importierende Project braucht selber mehere jars könnte das nen problem sein?



> X/Y per import-package importierst, dann stellt OSGi sicher das dein Bundle gar nicht aktiviert werden kann wenn die Abhängigkeit nicht erfüllt werden kann



Wird dann auch nicht aktiviert...

Als Notlösung konnte ich das Plugin in ein jar umwandeln und dieses dann einbinden? Gib es vieleicht noch eine andere Lösung...?

mfg


----------



## Wildcard (25. Jul 2010)

Krallistic hat gesagt.:


> Das zu importierende Project braucht selber mehere jars könnte das nen problem sein?


Absolut. Du darst keine Jars über den Classpath einbinden, das funktioniert zur Laufzeit nicht, darauf will ich doch die ganze Zeit hinaus 
Wenn du jars benötigst, mach OSGi Bundles draus, oder trage sie im Manifest als extra classpath entries ein (sie müssen dann in deinem Bundle liegen). Ersteres ist die schönere Variante, letzteres kannst du aber zum Beispiel tun um zu sehen ob das dein Problem löst.


----------



## Krallistic (26. Jul 2010)

> Du darst keine Jars über den Classpath einbinden, das funktioniert zur Laufzeit nicht, darauf will ich doch die ganze Zeit hinaus



Ist mir schon klar. Sind auch Bundle_Classpath entrys eingetragen. Hab jetzt bei jeden Project extra nochmal den komplette ClassPath gelöscht und per PDE Tools dann neu erstellen lassen. Immer noch das gleiche..

Könnte es vieleicht daran liegen das das Plugin A mit dem benötigten Klassen doppelt geladen wird? Einmal von meinem Plugin und einmal von einen anderen Plugin welche ich aber auch benötige?

mfg


----------



## Wildcard (26. Jul 2010)

Wie hast du die Library jars denn eingebunden?


----------



## Krallistic (26. Jul 2010)

> Wie hast du die Library jars denn eingebunden?



Eingetragen im Manifest unter "Bundel-Classpath" und dann von PDE den ClassPath erstellen lassen (rmt->PDE Tools->Update Classpath)


----------



## Wildcard (26. Jul 2010)

Krallistic hat gesagt.:


> Eingetragen im Manifest unter "Bundel-Classpath" und dann von PDE den ClassPath erstellen lassen (rmt->PDE Tools->Update Classpath)


Besser du machst das über den Manifest Editor (Runtime Tab -> Extra Classpath Entries).
Da du das anscheinend händisch getan hast: Daran gedacht auch den '.' im Bundle Classpath einzutragen?


----------



## Krallistic (26. Jul 2010)

> Daran gedacht auch den '.' im Bundle Classpath einzutragen


Ja ist drinnen wobei die GUI ihn bei mir nicht rein gesetzt hat...



> Da du das anscheinend händisch getan hast


Ich Probiere mittlerweile alles auf beide Arten(GUI/Hand) aus um Fehler auszuschließen..


----------

