Eclipse Plugin Entwicklung - NoClassDefFoundError

Mappenz

Bekanntes Mitglied
Hi,

ich habe den HelloWorld Code der in Eclipse bei den Plugin Projekten zur Auswahl steht als Grundlage. Das Projekt habe ich um Folgenden Code erweitert:
Code:
package serviceQuerry;

import java.rmi.RemoteException;

import javax.xml.rpc.Stub;

import web.GetDisksPortType;
import web.GetDisksRequest;
import web.GetDisks_Impl;


public class Querry {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		querryServer();
	}
		

	public static void querryServer() {

		GetDisksPortType diskPort = new GetDisks_Impl().getGetDisksPort();
		Stub stub = (Stub) diskPort;
		stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, "http://dienst.speicherweb.de/****.php5");
		GetDisksRequest request = new GetDisksRequest(10, 90);
		try {
			System.out.println(diskPort.getDisks(request));
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
}

Dazu habe ich natürlich die automatisch generierten Klassen für den Webservice als Quellcode in einem eigenen Package und alle nötigen Bibliotheken. Wenn ich diesen Code mit main() als Einstiegspunkt baue und ausführe klappt alles wie erwartet.

Der Quellcode des Plugins beinhaltet eine Klasse SampleAction implements IWorkbenchWindowActionDelegate. Die Funktion run(IAction Action) dieser Klasse habe ich verändert.

Code:
	public void run(IAction action) {
		String[] dialogButtonLabels = {"Generate"};
		new MessageDialog(window.getShell(), "Title", null,
				"Generate a random number", MessageDialog.NONE,
				dialogButtonLabels , 0).open();
		Querry.querryServer();    //DAS IST DER WICHTIGE TEIL
	}

Bauen und Ausführen des Projekts als Plugin Projekt erzeugt die Ausgabe:

Code:
!SESSION 2011-07-14 14:52:04.103 -----------------------------------------------
eclipse.buildId=M20110210-1200
java.version=1.6.0_26
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=de_DE
Framework arguments:  -product org.eclipse.epp.package.java.product
Command-line arguments:  -product org.eclipse.epp.package.java.product -data /home/michael/workspace/../runtime-EclipseApplication -dev file:/home/michael/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os linux -ws gtk -arch x86 -consoleLog

!ENTRY org.eclipse.ui 4 0 2011-07-14 14:52:16.703
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NoClassDefFoundError: javax/xml/rpc/Service
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
	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:247)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
	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:247)
	at serviceQuerry.Querry.querryServer(Querry.java:25)
	at uebung.actions.SampleAction.webservice(SampleAction.java:51)
	at uebung.actions.SampleAction.run(SampleAction.java:47)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
	at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:229)
	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:1258)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
	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:620)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
Caused by: java.lang.ClassNotFoundException: javax.xml.rpc.Service
	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:247)
	... 65 more

Nun wundere ich mich, warum die Libraries nicht gefunden werden, wenn sie doch ganz klar eingebunden sind.
 
M

maki

Gast
Wie hast du die Abhängigkeiten denn "eingebunden"?
Den buildpath fässt man bei OSGi/Eclipse RCP Projekten nicht an, dafür gibt es doch den Wizard für das manifest.mf
 

Sonecc

Gesperrter Benutzer
Sind die erforderlichen Bibliotheken auch OSGI-Bundles und sind sie korrekt als Dependencies in der plugin.xml eingetragen?
 

Mappenz

Bekanntes Mitglied
Naja, eingebunden hatte ich die Abhängigkeiten bis jetzt wo wie in einem normalen Java-Projekt. Über den buildpath bei den Projekteinstellungen.

Ich habe nun versucht in einem neuen Plug-in-Projekt die Abhängigkeiten mit dem Wizzard aufzulösen. Erfolglos, vielleicht weil die Bibliotheken als .jars vorliegen und nicht als bundles?

Ich konnte keine Anleitung finden, die Eclipse Plug-in Entwicklunng zeigt und über das HelloWorld Beispiel hinaus geht, bzw zeigt wie man den buildpath setzt. Kennt jemand eine?
 

Wildcard

Top Contributor
Den Buildpath setzt du überhaupt nicht, das macht Eclipse. Du änderst nur das Manifest und daraus wird der Classpath berechnet.
Bei nicht-OSGi Bibliotheken hast du zwei Möglichkeiten:
1.die jar in ein Bundle umwandeln (kann Eclipse automatisch per Rechtsklick)
2. Die jar in dein Bundle packen und im Manifest als Extra Classpath Entry bekanntmachen

1. ist dabei zu bevorzugen.
 

Mappenz

Bekanntes Mitglied
Danke Maki,
die Anleitung hinter dem Link habe ich gerade auch gefunden, das hat auch geklappt. Hattest du das auch damit gemeint, die jars per Rechtsklick umwandeln zu können, Wildcard? Wenn nicht wäre ich noch daran interessiert zu hören wie das geht, denn die Methode von Maki verschmutzt den Workspace und ist umständlich.

Leider habe ich schon den nächsten Fehler...
 

Mappenz

Bekanntes Mitglied
Der letze Fehler ist auch weg, ich weis aber nicht genau was ich getan habe. Bei meinen Versuchen habe ich das Projekt "libs" welches nach der Anleitung aus Makis link erstellt wurde kaput gemacht und neu nochmal neu erstellt, dabei den Haken "update references to the jar files" gesetzt. Ich vermute, dass dies den unterschied gemacht hat.

Ich kann, da mein Projekt endlich geht den Stacktrace nicht mehr reproduzieren, aber auf meiner Suche nach einer Lösung bin ich auf diese Analyse gestoßen, die wohl mein Problem beschreibt:
Frank Kieviet's Engineering Notebook: The java.lang.LinkageError: loader constraint violation" demystified

Ich bin weitest gehend zufrieden dass es nun Läuft. Es hinterlässt einen leicht bitteren Geschmack, dass ich nicht verstehe wo das letzte Problem lag, aber damit kann ich leben. Kann mir jetzt bestimmt auch keiner mehr sagen. Interessanter finde ich ob es nicht eine bequemere Möglichkeit gibt bundles tzu erstellen.
 
M

maki

Gast
Der Link hat imo rein gar nix mit deinem Problem zu tun, die OSGi bundles waren entweder falsch, falsch eingebunden oder das Projekt war falsch konfiguriert.

Was daran "umständlich" sein soll oder gar den "Workspace verschmutzt" ist mir schleierhaft, der Begriff "Target Platform" ist dir noch nicht geläufig?
Naja, jedenfalls gibt es fertige OSGi Bundles zB. bei Eclipse ORBit und dem Spring Enterprise Repository.

Anfangs hat man recht viele NoClassDefErors mit OSGi, bis man es versteht ;)

Auf vogella.de gibt es einige OSGi Tutorials, das Internet ist auch voll davon.
 

Mappenz

Bekanntes Mitglied
Target Platform habe ich tatsächlich zum ersten mal gelesen. Sicher Sinnvoll, aber wie dies die Verschmutzung des Workspaces verhindert habe ich noch nicht herausgefunden. Mit Verschmutzung meine ich, dass jedes auf die Vorgestellte Weise erzeugte Bundle ein eigenes Projekt auf dem Workspace darstellt.

Umständlich scheint mir zum einen, dass man überhaupt Bundles erstellen muss, zum anderen kommt es mir weniger Mühevoll die jars, falls man sie auf dem Workspace hat zu markieren und mit Rechtsklick, wie von Wildcard vorgeschlagen, zu Bundles zu machen.

Ein Framework, besonders Spring zu verwenden wäre sicher eine gute Idee. Mal sehen wie meine nächste Aufgabe aussieht.
 

Wildcard

Top Contributor
Die Target Platform kann direkt remote p2 Repositories einbinden. Du kannst also Bundles im Intranet bereitstellen, der Entwickler aktiviert dann die Target Platform Definition und Eclipse lädt im hintergrund alle benötigten Bibliotheken herunter, ohne das sie jemals im Workspace auftauchen.

Bundles muss man erstellen, weil normale jars nicht genug Metadaten enthalten als das OSGi damit arbeiten könnte.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
R Eclipse RCP vs. Plugin Entwicklung Plattformprogrammierung 5
M Eclipse Plugin PreferencePage BooleanFieldEditor Plattformprogrammierung 1
F OSGi Plugin unter Eclipse arbeitet anders als wenn veröffentlicht Plattformprogrammierung 2
R Einfaches Eclipse-Plugin-Beispiel funktioniert nicht Plattformprogrammierung 5
C plugin development environment eclipse Plattformprogrammierung 4
M Keybinding in Eclipse Plugin Plattformprogrammierung 3
B Eclipse Plugin Einstellungsleiste Plattformprogrammierung 2
O Eclipse Plugin - Einfachstes Problem, das es gibt. Plattformprogrammierung 2
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
T RCP Eclipse RCP: Wo/wann im Plugin ist workbench initialisiert? Plattformprogrammierung 14
C Eclipse Plugin NoClassDefFoundError Plattformprogrammierung 4
B RCP eigenes Eclipse Plugin wird nicht aufgelöst Plattformprogrammierung 7
P Wie bekomme ich ICompilationUnit aus dem event? bei Eclipse-Plugin Plattformprogrammierung 3
X Datei in einem Eclipse Projekt über Plugin zugreifen Plattformprogrammierung 2
hdi Frage zu Eclipse Plugin Development Plattformprogrammierung 12
D Canvas auf View in Eclipse PlugIn Plattformprogrammierung 3
H Bibliotheken in Eclipse-Plugin-Projekt verwenden. Plattformprogrammierung 18
H Eclipse-Plugin erstellen Plattformprogrammierung 22
hdi Schwierigkeiten mit Plugin für EPF (Eclipse Process Framework) Plattformprogrammierung 3
hdi Problem bei Eclipse Plugin Export Plattformprogrammierung 9
H Eclipse Plugin Dateihandling Plattformprogrammierung 2
A Eclipse Plugin Programmierung Dateien Refreshen Plattformprogrammierung 2
F Eclipse Plugin - Rückgabewert einer Methode Plattformprogrammierung 4
R Eclipse RCP - Plugin erstellen Plattformprogrammierung 2
lumo [Eclipse RCP] Plugin OHNE visuals Plattformprogrammierung 7
B Eclipse plugin fuer dummys Plattformprogrammierung 11
N Eclipse RCP Plugin aus jar starten Plattformprogrammierung 7
M Eclipse Plugin Depedencies auslesen... Plattformprogrammierung 14
R Wo/Wie Eclipse Plugin einhängen für Jar-Export? Plattformprogrammierung 14
V [erledigt] Eclipse plugin startet nicht Plattformprogrammierung 3
S Eclipse-Plugin + Velocity + Files lesen Plattformprogrammierung 3
C AST (Abstract Syntax Tree)-Generierung für Eclipse-Plugin Plattformprogrammierung 5
V Javadoc an Eclipse Plugin anfügen Plattformprogrammierung 4
V JNI in Eclipse Plugin Plattformprogrammierung 17
F Eclipse plugin ausserhalb von Eclipse starten Plattformprogrammierung 4
byte [ Eclipse ] NoClassDefFoundError bei neuem Plugin Plattformprogrammierung 4
I Eclipse-Plugin: Perspektive mit 2 Views Plattformprogrammierung 5
G Frage zu Eclipse Plugin Plattformprogrammierung 5
E OSGi Eclipse Plug-in programmierung: java.lang.NullPointerException: Cannot enter synchronized block because "profile" is null Plattformprogrammierung 4
R Eclipse Bundles Plattformprogrammierung 2
Robertop RCP Command in bereits bestehendes Eclipse-Menü einbauen Plattformprogrammierung 4
T Java Projekt läuft nur in Eclipse Plattformprogrammierung 6
D RCP P2-Repository für Eclipse-Plugins Plattformprogrammierung 0
M Debuging in Eclipse Annotations Processor Plattformprogrammierung 0
D Nach Sprachpaket Installation kann eclipse nicht mehr gestartet werden Plattformprogrammierung 4
L0MiN Wie kann ich ein Klassendiagramm aus Eclipse heraus erstellen? Plattformprogrammierung 5
M Eclipse Probleme beim Ausführen eines Programms Plattformprogrammierung 3
feinperligekohlensaeure Eclipse Workspace gemeinsam Nutzen -> keine .project Datei Plattformprogrammierung 1
F Eclipse Build Path auf benötigte Projekte Plattformprogrammierung 4
B Daten von Eclipse extern sichern Plattformprogrammierung 2
B Eclipse zeigt Fehler nach Java-Update auf 1.8.0_40 Plattformprogrammierung 3
VfL_Freak [Eclipse] Fehleranzeige im Reiter "Problems" Plattformprogrammierung 1
S Errors in workspace bei eclipse Plattformprogrammierung 3
T eclipse bietet keine META-INF an Plattformprogrammierung 1
N Eclipse wo starten Plattformprogrammierung 6
A Eclipse schließt einfach ohne Fehlermeldung Plattformprogrammierung 4
W Eclipse vergißt beim Exportieren Resources-Ordner Plattformprogrammierung 11
A RCP Eclipse e4 und Injection-Contexts Plattformprogrammierung 0
K Eclipse fährt nicht mehr hoch. Metadatendatei schuld? Plattformprogrammierung 7
C [Eclipse RCP E4]InjectionException: no actual value was found for the argument "MDirtyable" Plattformprogrammierung 8
T Eclipse Eigenschaften hinzufügen Plattformprogrammierung 2
M RCP [Eclipse RCP 3.4] ViewTab Kontextmenu "Alle schließen" Plattformprogrammierung 0
D Problem mit eclipse Plattformprogrammierung 2
S Verschieben des Verzeichnis .eclipse aus Userprofile Plattformprogrammierung 3
A RCP Kann kein Eclipse 4 Projekt anlegen Plattformprogrammierung 0
S RCP Exportiertes RCP Produkt lädt Datei nicht, bei Start aus Eclipse wird Datei jedoch gefunden Plattformprogrammierung 6
G Eine Library in Eclipse zur Verfügung stellen Plattformprogrammierung 14
Gregorrr Eclipse RCP Product Build-Nummer + Jenkins Plattformprogrammierung 6
H OSGi OSGi + Logback + slf4j - Eclipse Run Configuration Plattformprogrammierung 7
R RCP Commands nutzen / org.eclipse.ui.file.save Plattformprogrammierung 7
O Installiere externe Methode "containsNone" in Eclipse Plattformprogrammierung 2
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
B Eclipse Probleme mit build Plattformprogrammierung 8
H Keine Hilfe/API mehr in Eclipse Juno? Plattformprogrammierung 4
B Neue SuppressWarning in Eclipse Juno Plattformprogrammierung 6
B Eclipse Property Page Plattformprogrammierung 6
B Eclipse PreferencePage Plattformprogrammierung 3
B Birt-Previewer über Eclipse Plattformprogrammierung 14
J Eclipse Plug-In für UML-Diagramme Problem Plattformprogrammierung 4
R Eclipse RCP Tabellen-View (Anfängerfrage) Plattformprogrammierung 3
C Eclipse: Notification beim umbennen von Methoden? Plattformprogrammierung 4
schalentier Eclipse Sourcecode Plattformprogrammierung 4
A Eclipse undo/redo button reagiert nicht auf Änderungen in der OperationHistory Plattformprogrammierung 5
P Eclipse M2_REPO (NON MODIFIABLE) Plattformprogrammierung 8
B Eclipse: Contextmenu id erhalten? Plattformprogrammierung 9
H Datei in eclipse wird nicht erkannt Plattformprogrammierung 3
O Neues Tastenkürzel für Eclipse Editorfenster registrieren Plattformprogrammierung 2
Madlip RCP eclipse.ui.bindings (Key-Problematik) Plattformprogrammierung 2
S Eclipse vs. JavaMail vs. Ubuntu vs. Windows Plattformprogrammierung 3
M eclipse führt applikationen nicht mehr aus Plattformprogrammierung 6
S Eclipse: Auf CTRL-C/CTRL-V im Package Explorer? Plattformprogrammierung 4
M Eclipse und Hilfen Plattformprogrammierung 5
G Eclipse buggt rum!!! Plattformprogrammierung 4
B Eclipse RCP und Java 7 Plattformprogrammierung 7
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
G Eclipse Plug-in: wie refreshe ich eine combobox? Plattformprogrammierung 4
M Eclipse Plug-in: Wie eine Grafik einfügen? Plattformprogrammierung 20
M RCP [Eclipse RCP] Feature Export und "Fehler"... Plattformprogrammierung 3
P Eclipse speichert keine Änderungen Plattformprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben