# Versionskonflikt bei JDOM



## brasilian (28. Mrz 2006)

Hallo zusammen,

ich verwende WSAD und die neuste JDOM-Version (1.0 vom 09.09.2004). So weit so gut. 
Ich bin jedoch gezwungen nicht mehr die neuste JDOM-Version zu verwenden, sondern  die Version
Beta 9 RC2 vom 04.20.2003. 
Wenn ich dieses jar-File verwende, dann kommt es zu folgender Exception: java.lang.NoSuchMethodError.
Diese Exception tritt bei der addContent-Methode der Klasse Element auf. Übergebe ich ihr einen String funktioniert
sie, bekommt sie dagegen ein Element übergeben gibt es die Exception. 
Der Fehler tritt hier sehr wahrscheinlich auf, da auf ein Element der neusten JDom-Version (1.0) zugegriffen wird und nicht auf das Element der älteren JDOM-Version. 

Entferne ich nun auch die physische Datei jdom.jar aus dem Ordner C:\Program Files\Java\j2sdk1.4.2_04\jre\lib\ext
so kann ich das Programm erst gar nicht mehr ausführen und erhalte dafür folgende Fehlermeldung:

Exception occured during launch

Reason:
The archive C:/Program Files/Java/j2sdk1.4.2_04/jre/lib/ext/jdom.jar which is referenced by classpath.
does not exist.


Ich habe unter Window->Preferences->Java->ClasspathVariabels jedoch keinen entsprechenden Eintrag gefunden. Auch bei den Umgebungsvariabeln von WinXP gibt es keinen entsprechenden Eintrag. Genau dasselbe gilt für die Dos-Kommandos: echo %path% und echo %classpath%.

Ich verstehe ganz einfach nicht, wo die Verbindung zu dem neueren JAR-File sein sollte.

Vielen Dank für eure Bemühungen
Brasilian


----------



## byte (28. Mrz 2006)

brasilian hat gesagt.:
			
		

> Wenn ich dieses jar-File verwende, dann kommt es zu folgender Exception: java.lang.NoSuchMethodError.
> Diese Exception tritt bei der addContent-Methode der Klasse Element auf. Übergebe ich ihr einen String funktioniert
> sie, bekommt sie dagegen ein Element übergeben gibt es die Exception.



Die Methode gabs dann in dieser Beta-Version wohl noch nicht.




> Exception occured during launch
> 
> Reason:
> The archive C:/Program Files/Java/j2sdk1.4.2_04/jre/lib/ext/jdom.jar which is referenced by classpath.
> ...



Welche IDE verwendest Du oder compilierst Du per Hand über die Konsole? Hast Du Dein Projekt mal neu kompiliert und ausgeführt, nachdem Du das Jar entfernt hast? Hast Du denn den Classpath zu der neuen (alten) Beta-Jar gesetzt?


----------



## brasilian (28. Mrz 2006)

> > brasilian hat folgendes geschrieben::
> > Wenn ich dieses jar-File verwende, dann kommt es zu folgender Exception: java.lang.NoSuchMethodError.
> > Diese Exception tritt bei der addContent-Methode der Klasse Element auf. Übergebe ich ihr einen String funktioniert
> > sie, bekommt sie dagegen ein Element übergeben gibt es die Exception.
> ...



Das ist nicht richtig. Die Methode gibt es bereits auch schon in der Beta mit den entsprechenden Übergabegabe-Parameter. Jedoch übergeb ich der alten Methode, welche ein altes Element erwartet aus irgendeinen Grund wohl ein neues Element, was die Methode natürlich dann nicht kennen kann.




> > Zitat:
> > Exception occured during launch
> >
> > Reason:
> ...



Als IDE verwende ich halt WSAD. Das basiert auf Eclipse ist aber meines Wissens eine kommerzielle Version, welche in diversen Punkten weiterentwickelt wurde. Das Projekt in welchem sich die Datei befindet habe ich bereits mehrfach neugestartet (inkl. IDE). Expliziet kompiliert habe ich es aber nicht mehr, halt nur mittels RUN AS -> JAVA APPLICATION neu gestartet. Ich wüßte auch momentan nicht über welchen Eintrag in Eclipse ich das Projekt hätte neu kompilieren können. 

Deine Nachfrage zum Classpath kann in meinen Augen entscheidend sein, da ich mir hier auch nicht ganz sicher bin. Ich habe die entsprechenden jar-Files über das Project->Propertiers->Java Build Path hinzugefügt bzw. entfernt. Ich habe sonst keinen Eintrag in einem Classpath geschrieben. Das Ganze hatte ja auch so, mit der neusten Version funktioniert. Leider bin ich nun gezwungen auf die ältere Version umzustellen.

Hat der Ordner C:/Program Files/Java/j2sdk1.4.2_04/jre/lib/ext/ vielleicht sonst noch ne besondere Bedeutung ?
Gibt es neben dem echo-Befehl unter MS-DOS und dem Umgebungsvariabeln in WinXP noch ne andere Möglichkeit an den Classpath-Variabeln dran zukommen ?


----------



## byte (28. Mrz 2006)

Hm ok, kenne diese IDE nicht. Aber wenn es wirklich ein Eclipse Derivat ist, kannst Du folgendes probieren:

Guck mal in den Workspace (das Verzeichnis, wo Dein Projekt gespeichert ist) und öffne die Datei .classpath mit einem Texteditor (sofern es die bei Deinem Tool gibt). Dort guckst Du, ob ein entsprechender Eintrag " <classpathentry... " noch auf Dein (gelöschtes) Jar zeigt. Falls ja: Zeile entfernen.


----------



## brasilian (28. Mrz 2006)

Hallo byto,

erst mal möchte ich mich für deine schnelle Hilfe bedanken. 
Ich werde erst wieder am Freitag auf der Arbeit sein (Azubi) und kann deine Vorschlag mit dem .classpath ausprobieren. 
Ich habe gerade mal bei mir zu Hause (habe Eclipse 3.1) geschaut und diese Datei direkt gefunden. Ich denke auch, dass ich am Freitag bei WSAD diesen Eintrag finden sollte. 

Ich werde mich auf jeden Fall am Freitag (morgen) hier melden und informieren ob das Problem weiterhin existiert.

Gruß
Brasi


----------



## brasilian (31. Mrz 2006)

Hallo,

bei WSAD gibt es die Datei .classpath für mein Projekt auch. Ich habe dort nach einen entsprechenden Verweis auf die neue JDOM.jar Datei gesucht, doch da ist nichts. Ich habe auch schon das neue jar-File nochmals in das Projekt eingebunden (das alte natürlich entfernt) um zu schauen, ob die Datei .classpath aktualisiert wird,
und genau das wird sie auch. Also hier kann in meinen Augen nicht das Problem liegen, da ich j sonst auf einen entsprechenden Eintrag gestoßen wäre.

Ich hoffe, dass der ein oder andere vielleicht noch eine andere Idee hat, wie ich das Problem behoben bekomme.

Gruß
Brasi


----------



## byte (31. Mrz 2006)

Also wenn das alte Jar aus dem Projekt entfernt wurde, im Classpath kein Eintrag mehr zu finden ist genauso wie in der .classpath, dann verstehe ich auch nicht, wie er noch das falsche Jar benutzen kann. Vielleicht liegts an diesem Tool, keine Ahnung. Verstehe eh nicht warum Du nicht Eclipse benutzt. 

Du kannst mal ein neues Projekt erstellen und den Sourcecode (also alle .java Dateien) aus dem alten Projekt dort hinkopieren. Dann addest Du ganz normal die (richtigen) externen Jars und schaust, ob es dann läuft.


----------



## brasilian (31. Mrz 2006)

> Also wenn das alte Jar aus dem Projekt entfernt wurde, im Classpath kein Eintrag mehr zu finden ist genauso wie in der .classpath, dann verstehe ich auch nicht, wie er noch das falsche Jar benutzen kann



Dann habe ich mich wohl unverständlich ausgedrückt. Wenn ich das alte Jar aus dem Projekt entferne und das neue Jar habe ich bereits vorher auch schon entfernt, dann passiert erstmal folgendes:

- Der Editor meckert dann logischerweise die verwendeten Instanzen aus dem .jar-File an. Das Programm ist also fehlerhaft. Versuche ich es trotz Fehler zu starten, kommt auch die oben beschriebene Fehlermeldung.



> Du kannst mal ein neues Projekt erstellen und den Sourcecode (also alle .java Dateien) aus dem alten Projekt dort hinkopieren. Dann addest Du ganz normal die (richtigen) externen Jars und schaust, ob es dann läuft.



Das wäre sicherlich ein möglicher Ansatzpunkt, der bei mir jedoch leider nicht in Frage kommt. Dies liegt ganz einfach daran, dass ich nur eine Source-Datei in einem sehr großen Projekt verändere, die zahlreiche andere Verknüpfungen hat. 

Ich frage mich noch immer wo letztlich die Verknüpfung zu dem folgenden Pfad C:/Program Files/Java/j2sdk1.4.2_04/jre/lib/ext/jdom.jar versteckt ist. Diese Verbindung zu finden ist in meinen Augen meine einzige Möglichkeit.


----------



## Murray (31. Mrz 2006)

brasilian hat gesagt.:
			
		

> Ich frage mich noch immer wo letztlich die Verknüpfung zu dem folgenden Pfad C:/Program Files/Java/j2sdk1.4.2_04/jre/lib/ext/jdom.jar versteckt ist. Diese Verbindung zu finden ist in meinen Augen meine einzige Möglichkeit.


Ich bin mir jetzt nicht sicher, ob Eclipse und irgendwelche Derivate da rumpfuschen, aber normalerweise werden die Jars aus jre/lib/ext automatisch gezogen, ohne dass man dieses Verzeichnis in den Classpath aufnehmen müsste - jre/lib/ext ist sozusagen die plattformneutrale Version der DLL-Hölle :wink:


----------



## brasilian (31. Mrz 2006)

Ich habe den Fehler gefunden   .

Es hat an folgender Situation gelegen: 

Das Project welches ich zum Schreiben der XML-Datei verwenden war von den Einstellung absolut korrekt. Trotzdem hat ja alles auf irgendeine Verknüpfung zu dem neuen jar-File hingedeutet. In meinem Workspace liegen
etwa 5 sehr große Projekte und in genau einem dieser Projekte wurde weiterhin auf die neue JAR-Datei verwiesen, die natürlich nicht mehr an der richtigen Stelle war, nachdem ich die Datei aus dem Ordner entfernt hatte. Ich habe dann einfach bei dem zweiten Projekt auch die Verbindung auf die alte JAR-Datei gesetzt und es funktioniert.

Vielen Dank nochmals für eure tolle Hilfe
Brasi


----------

