Portal > Foren > Java > Allgemeine Java-Programmierung > Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/JDOMException
Antwort
 
Themen-Optionen
Alt 04.11.2005, 08:49 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard [SOLVED]Exception [...] "main" java.lang.NoClassDefFoundError: org/jdom/JDOMException

Hi!

Hab mittels eclipse eine .jar Datei erstellt, um ein etwas Umfangreicheres Projekt aus der Konsole heraus starten zu können. Allerdings kommt folgende Meldung:

Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/JDOMException
(Benutze den JDOM um am Anfang config-daten aus einem .xml file zu lesen. Im Eclips funktioniert es wunderbar).

Die Fehlermeldung sieht schon so nach Classpath aus, also hab ich mal
Code:
java -cp C:\JDOM\jdom.jar -jar client.jar
versucht. Ergebnis: Gleiche Fehlermeldung!

Dann hab ich die CLASSPATH variable unter der Systemsteuerung geändert und auf den entsprechenden Pfad gesetz. Ergebnis: Gleiche Fehlermeldung.

Nächste Idee: jdom.jar in das gleiche verzeichnis kopieren.
Gemacht. Classpath um den "." (= aktuelles Verzeichnis) ergänzt. Ergebnis: Gleiche Fehlermeldung!

Also nochmal
Code:
java -cp . -jar client.jar
versucht. Ergebnis: Gleiche Fehlermeldung!

Hab dann irgendwo im Netz den Hinweis gefunden, ich solle sicherstellen das die jdom.jar im Buildpath von eclipse ist. Hab ich mal nachgesehen (Project->Properties->Build Path) War nicht, drinn, jetzt ist sie es. Ergebnis: Gleiche Fehlermeldung!

Ein Aufruf von
Code:
jar -tf client.jar
gibt mir zwar alle classen aus, aber auch nichts von jdom.jar!

Das Projekt benutzt auch noch Orbacus, mit den Zahlreichen jar`s die dort verwendet werden, gibt es aber keine Probleme...


Hat jemand noch ne Idee, woran das liegen kann? Und vorallem wie ich das behebe! (Ideal wäre ne möglichkeit das ganze JDOM mit in die .jar zu packen, um alle abhängigkeiten von meinen Variablen und Pfaden zu vermeiden.)

Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 09:57 Nach oben    #2
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Probier doch mal
Code:
 java -verbose -cp c:\JDOM\jdom.jar -jar client.jar
Diese Option kann man auch in Eclipse setzen: im "Create, manage and run configuration"-Dialog den Reiter "Arguments" wählen und dort im unteren Bereich ("VM-Arguments") die Zeile
Code:
-verbose:class
einfügen.

Damit sieht man, welche Klassen woher geladen werden. Machmal hilft das, wenn man solchen Classpath-Problemen auf der Spur ist.
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 10:41 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

Ich versuch es mal...
da es aber recht viele Klassen sind (100+) kann das etwas dauern...

Danke für die schnelle Antwort!

Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 13:17 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

edit:/ In diesem Beitrag beschriebenes Problem war nur ein vergessenes Häckchen beim jar-Export Schuld. Wer`s schon gelesen hat, einfach vergessen!

Habe aber immernoch das Problem mit dem JDOM.
Die Ausgabe mit -verbose hat mir nicht weitergeholfen, hab den Fehler noch nicht gefunden...

Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 13:53 Nach oben    #5
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Zitat:
Zitat von Arvodan
habe sogar schon versucht, den CLASSPATH auf D:\projects\hdm\libExt\CorbaCanServer\CClientOpera tions.java
zu setzen. Aber das hat auch nichts geändert.
Das kann auch nicht klappen: der Classpath muss ja auf die Class-Files verweisen, nicht auf die Sourcen.

Die Fehlermeldung besagt, dass CorbaCanServer.CClientOperations geladen werden soll, also die Klasse CClientOperations aus dem Package CorbaCanServer (normalerweise gibt es die Konvention, dass Packages immer klein geschrieben werden, aber grundsätzlich müsste es auch so funktionieren).

Der Classpath muss jetzt entweder ein Jar- oder Zip-File enthalten, in dem die Klasse enthalten ist, oder er muss ein Verzeichnis beeinhalten, in dem die einzelnen Class-Files liegen. Im zweiten Fall ist es entscheidend, dass man das Verzeichnis angibt, in dem es ein Unterverzeichnis mit dem ersten Teil des Package-Namens gibt.

Schwierig zu erklären, daher ein Beispiel:

Test.java:

Code:
package com.xyz.test;

public class Test {
}
Wenn man das jetzt übersetzt mit
Code:
javac -d \home\work\java\lib Test.java
(das Verzeichnis muss existieren), dann entsteht in d:\home\work\java\lib ein Unterverzeichnis com (der erste Teil des Package-Namens). In diesem Unterverzeichnis gibt es ein weiteres names xyz und darin eines mit test. Darin steht dann das Class-File Test.class.

Der Classpath muss nun auf d:\home\work\java\lib und nicht etwa auf d:\home\work\java\lib\com\xyz\test stehen, da die Unterverzeichnisse, die dem Package-Namen entsprechen, später vom ClassLoader ergänzt werden.

Existiert bei Dir im Filesystem die Datei D:\projects\hdm\libExt\CorbaCanServer\CClientOpera tions.class? Wenn das so ist, muss wohl das Verzeichnis D:\projects\hdm\libExt in den Classpath.
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 13:57 Nach oben    #6
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

jo, das Verzeichnis gibt es. Hab aber einfach beim erstellen der jar-Datei vergessen das Package CorbaCanServer mit anzuwählen...

edit:/ also ich habe das CorbaCanServer zeugs garnicht im Classpath, es liegt alles direkt in der .jar Datei.Nur mit dem JDOM klappt das nicht...


Dennoch kommt die Fehlermeldung mit dem JDOM...obwohl er im Classpath liegt...
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 14:11 Nach oben    #7
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Jar-Files müssen immer explizit im Classpath auftauchen; es reicht nicht, sie in ein Verzeichnis zu spielen, das im Classpath enthalten ist.

Bsp.:

Das aktuelle Verzeichnis enthält jdom.jar

Code:
 java -cp . -jar client.jar
klappt nicht, da nicht das Jar-File referenziert wird (es könnte so klappen, wenn jdom.jar im aktuellen Verzeichnis entpackt worden wäre, aber das sollte man nicht machen).

Richtig ist
Code:
  java -cp .\jdom.jar -jar client.jar
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 14:28 Nach oben    #8
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

Code:
C:\>set Class
CLASSPATH=D:\projects\libExt\jdom.jar
das war es leider auch nicht...
(wusste ich nicht, das .jar`s explizit auftauchen müssen, hab es aber wohl "intuitiv" (oder aus Zufall) gemacht).

Sonst `ne Idee? Gibt es noch was, außer dem Classpaht, das in dem System eingestellt werden müsste? Nein, oder?

Echt ärgerlich das ganze...

Grüße
Arvodan

edit:/
Hab mir das ganze mal nochmal mit jar -tf client.jar angesehen..
die jdom.jar ist jetzt in dem jar file enthalten. Und in der jdom.jar wiederum ist die gesuchte Klasse auch enthalten...also wieso findet der das dann nicht? Kann das dann überhaupt noch was mit dem Classpath zu tun haben? Oder was mit dem Manifest? Oder womit?
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 20:47 Nach oben    #9
Benutzer
 
Registriert seit: 15.11.2005
Beiträge: 75
Standard

Sehr mysteriös - verwendest Du einen eigenen ClassLoader? Damit kann man sich u.U. solche Probleme einfangen.
Murray ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2005, 21:06 Nach oben    #10
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Eine Jar-Datei sollte man nicht unbedingt in eine andere Jar-Datei packen. Speziell dann nicht, wenn die äußere auf die innere zugreifen will.
__________________
Patrick Gotthardts Weblog.
pago ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.11.2005, 11:27 Nach oben    #11
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

Nein, benutze keinen Classloader. hab j2sdk1.4.2_09 komplett Standard. Eclipse 3.1. Auch standard...

Dumme Sache das....das muss doch irgendwie außerhalb vom Eclipse zum laufen zu bekommen sein....
kann mir die .classpath Datei von eclipse da weiterhelfen? Oder schließt ihr den Classpath als Fehlerursache auch aus?

Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 09.11.2005, 22:51 Nach oben    #12
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 575
Standard

Also, ich würde davon abraten eine .jar-Datei in eine andere .jar-Datei zu verpacken und diese dann als Bibliothek verwenden zu wollen.
Das führt nur zu Problemen, wobei es aber die Möglichkeit gibt diese in der Manifest-Datei mit anzugeben.
Wie gesagt, gab bei mir nur Probleme.

Du willst die .jar ja sicherlich auch mal ausliefern, oder?
Und dann den Usern klar zu machen, was sie eingeben müssen damit es startet, oder tatsächlich für alle Betriebssysteme ein Script zu schreiben.... klingt sehr aufwendig.

Mach einfach folgendes, so gehe ich immer vor:
  1. Ein neues (leeres) Verzeichnis anlegen
  2. Deine eigenen Class-Dateien hinein kopieren
  3. Die .jar Dateien die du brauchst auch hinein entpacken
  4. Die Dateien von Hand mit Jar packen

Auf diese Weise kannst du dich darauf verlassen, dass alle benötigen Bibliotheken direkt für das Programm verfügbar sind, und du bist alle Probleme los.
Für mich gibt es keinen ersichtlichen Grund die Bibliotheken unbedingt in eine eigene .jar zu packen nachdem dein Programm Gold gegangen ist.
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.11.2005, 11:30 Nach oben    #13
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

Ah, Sparrow, das war die Lösung! Alle Datein in ein eigenes Archiv, von Hand das jar file gebaut und dann ging es...

Man sollte sich halt nicht immer auf IDE`s verlassen....

Vielen Dank für die Hilfe, an das ganze Forum!


Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2006, 12:50 Nach oben    #14
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

Nachtrag: Nachdem ich stundenlang an einem ähnlichen Problem rumgebastelt hab, habe ich rausgefunden das es auch geht, wenn ich besagte .jar Datei in JAVA_HOME/jre/lib/ext ablege. (bzw. bei einer anderen in JAVA_HOME/jre/lib).

Jetzt stellt sich mir die frage, warum das so dann geht, aber mit setzen des Klassenpfades nicht? Das einzige was ich mir vorstellen könnte, wäre das die JVM die Klasse braucht, bevor der eigentliche Classloader für die Anwendung gestartet wird, nur warum?

Hat da jemand erfahrung mit? Vielleicht wird das in Zukunft mal wichtig...

Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.02.2006, 20:38 Nach oben    #15
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 575
Standard

Repdoduzier das Problem mal für mich, sag mir ganz genau was nicht geht.
Schränk das Problem nach Möglichkeit ein, bau ein Programm, das nur eine einzige Bibliothek braucht und sag mir dann genau was geht und was nicht geht.

Dann versuchen wir das mal zu lösen.

Gruß
Sparrow
sparrow ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.02.2006, 09:12 Nach oben    #16
Neuer Benutzer
 
Registriert seit: 29.08.2005
Beiträge: 20
Standard

Okay. Werde dann einfach einen XML-Parser mit besagtem jdom.jar bauen...
Kann ich aber erst morgen machen bzw. heute am späteren abend. Ich meld mich hier wieder, sobald ich die Klasse hab.

Grüße
Arvodan
Arvodan ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Thread mehrfach starten jack77 Desktop-Applikationen und Grafik 18 07.03.2007 17:44
Anzeige, wann ein Thread erstellt wurde hinzugefügt Ben Archiv 5 25.01.2006 22:55
Problem bei der Einbindung eines Applets in HTML exoskelett Desktop-Applikationen und Grafik 13 24.01.2006 18:45
Exception aber wo? Sengi Allgemeine Java-Programmierung 1 04.01.2006 19:32
Thread in Applet wird nicht gestartet? Ben Desktop-Applikationen und Grafik 2 26.10.2005 20:33


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:40 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44