debug funktioniert, laufzeit meldet noclassdeffounderror

Status
Nicht offen für weitere Antworten.

schnurpsel

Mitglied
hallo zusammen,

ich hoffe, dass mir hier jemand bei meinem problem helfen kann.
ich habe ein vorhandenes programm <prog>. für dieses programm gibt es ein plugin <plug> mit diversen funktionen, die auch funktionieren. nun soll plug funktionalität zum auslesen von pdf-files zur verfügung stellen. ich habe mich für pdf-box entschieden. pdfbox hat eine pdfbox.jar und weitere benötigte externe jars.
im folgenden habe ich die schritte zum einbinden dieser jars aufgelistet:
1. ich habe im workspace von plug einen lib-ordner angelegt und in diesen die jars kopiert
2. in eclipse habe ich im plugin.xml unter runtime und classpath diese jars hinzugefügt
3. zusätzlich habe ich die jars über "add external jars" des buildpath hinzugefügt.
--> solange ich plug aus eclipse heraus debugge funktioniert es problemlos.
--> nun exportiere ich plug über "deployable plugins and fragments" ohne fehlermeldungen. anschließend kopiere ich plug in den plugin-ordner von prog. beim ausführen des quellcodes kommt nun ein noclassdeffounderror beim ersten zugriff auf eine klasse von pdfbox. innerhalb der plug.jar-datei sind die pdfbox-jars jedoch vorhanden.

hier noch einige zusatzinfos:
- eclipse 3.3.2
- plug wird über ein feature in prog eingebunden
- ich debugge plug direkt aus eclipse heraus, indem ich im debug-dialog "run a product" aktiviere und dort das entsprechende product (also prog) angebe.

ich hoffe ihr könnt mir helfen bzw. mir erklären was ich falsch mache.

grüße
schnurpsel
 

schnurpsel

Mitglied
so ich habe gerade erneut hier im forum geschmökert und dabei folgendes gefunden:

Wildcard hat gesagt.:
3. Du bringst selbst irgendwelche Bibliotheken mit(die du warum auch immer nicht zu Bundles machen willst). Diese Bibliotheken müssen innerhalb deines Bundles liegen (in der Regel als jar) und im Manifest als extra classpath entries angegeben sein.
[..]
Wenn du einer jar jedoch kein erweitertes Manifest verpassen willst, oder kannst, hast du die Möglichkeit es Bundle Intern zu verwenden.
Kopier das jar in dein PlugIn Project (zB in /lib) und referenzier es als extra classpath entry im Manifest deines Bundles (siehe Bilder weiter oben).

wenn ich bei mir auf "add jars" bei extra classpath entries klicke sind keine entries vorhanden. woran liegt das? kann das schon das problem sein?
ich habe mal noch einen screenshot meiner einstellungen angehängt.
 

velaluka

Aktives Mitglied
Hallo,
du darfst die abhängigen Jars nicht mit in deine Jar packen, sondern musst sie quasi extern mitliefern. Damit dein Plugin zur Laufzeit die Jars findet, musst du in der Manifest Datei den Classpath Eintrag entsprechend anpassen. In der Regel werden die Jar in einen ordner "lib" gepackt. Ansonsten einfach mal ein Plugin öffnen und die Struktur kopiern ;)
Hoffe es hilft
Ciao velaluka
 

schnurpsel

Mitglied
hallo,

also ich habe jetzt das plugin anders exportiert und einen plugin-ordner, der die jars in einem lib-ordner enthält. im angehängten bild kann man das erkennen. in der manifest-datei steht es meiner meinung nach auch korrekt drin.
aber die fehlermeldung besteht leider immer noch: "java.lang.NoClassDefFoundError: org/pdfbox/util/Splitter" bei Zeile 3.

Java:
 		PDDocument doc;
		List<PDDocument> documents = null;
 		Splitter splitter = new Splitter();

mir ist schon klar, dass ich irgendwo was falsch mache. beim debuggen funktioniert es immerhin. aber ich finde die stelle einfach nicht, an der mir der fehler unterläuft... *kopf kratz*

grüße schnurpsel
 
Zuletzt bearbeitet:

velaluka

Aktives Mitglied
Hallo schnurpsel,
leider habe ich nicht viel mit Plugin Entwicklung zu tun:noe:
Aber in einer "normalen" Manifest Datei werden die Classpath Einträge mit einem Leerzeichen und nicht mit einem Komma getrennt.
Allerdings glaube ich das in deinem Fall ein plugin.xml weitere Ressourcen bekannt machen sollte.
Ciao velaluka
 

dzim

Top Contributor
Keine Ahnung, was genau schief geht, aber ich habe es im plugin-editor (der für die plugin.xml, die manfifest.mf und die build.properties) auch einfach nur - wie du - den Classpath angepasst und meine libs aus dem lib-Ordner eingetragen, was dann in der manifest ungefähr so aussieht (Eclipse >3.4 glaub ich)
Bundle-ClassPath: lib/jcommon-1.0.16.jar,
lib/jfreechart-1.0.13-experimental.jar,
lib/jfreechart-1.0.13-swt.jar,
lib/jfreechart-1.0.13.jar,
lib/swtgraphics2d.jar

In meinem Fall für JFreeChart - und es klappt.
Was ich noch getan hab, da es bei mir ein separates plugin ist, was die libs hält, ich habe die notwendigen packages, die ich noch brauchen werde, in "Exported Packages" eingetragen (im Reiter Runtime).
Aber da es bei dir, wenn ich es richtig verstanden habe, nur ein plugin ist, sollte das meines Wissens nach nix machen - aber probier's vielleicht...
 

schnurpsel

Mitglied
hallo dzim,

danke für deinen tipp: ich habs versucht, aber das ergebnis ist leider das gleiche :bahnhof:

vielleicht hat ja sonst noch jemand eine idee?

gruß von schnurpsel
 

Wildcard

Top Contributor
Öffne den Manifest Editor, geh zu 'Build' schau dir den Binary Build an und stell sicher das die zusätzlichen Jars beim binary build auch mit exportiert werden.
 

dzim

Top Contributor
Stimmt, das sollte man vielleicht mal überprüfen...
Noch so etwas wäre vielleicht mal zu schauen, ob alle benötigten Plugins für deine Laufzeit angegeben sind.
Ich denke du wirst zu testen der Anwendung deine Anwendung aus Eclipse herraus starten und nicht jedes mal exportieren.
Also: Run-Knopf drücken, aus Run Configurations gehen, den Reiter Plug-ins anwählen und einfach mal Add Requered Plug-ins drücken...
Vielleicht hilft dir das ja weiter.
 

schnurpsel

Mitglied
hallo,

vielen dank für eure hilfe :)
es funktioniert zwar immer noch nicht, allerdings wird es erst einmal zurückgestellt. scheinbar wird in zukunft ein anderes dateiformat für diese funktion verwendet und ich muss kein pdf mehr parsen *halleluhja*.

und nochwas: ist ein super-forum hier, dass mir schon des öfteren geholfen hat :toll:

grüße von schnurpsel
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben