[SOLVED] Classpath und statische Variablen

Status
Nicht offen für weitere Antworten.

Arvodan

Mitglied
Hallo Forum.

Ich habe folgendes Problem:
Ich hab eine Anwendung die ein paar Klassen aus einem fremden .jar File benutzt. Eine dieser Klassen wird einer statischen Variablen zugwiesen.

Code:
private static Position position = new Position();

Genau an dieser Stelle bekomme ich eine Exception in thread "main" java.lang.NoClassDefFoundError: Exception.
Das .jar file liegt im Classpath. (ganz sicher, da andere .jar Dateien die im gleichen Verzeichnis liegen gefunden werden) Auch wenn ich es in das aktuelle verzeichnis lege, findet er es nicht. (Obwohl das im Classpath ist.) (Andere .jar Dateien die im gleichen Verzeichnis liegen, werden gefunden.)

ABER: wenn ich die .jar Datei ins JAVA_HOME/lib/ext lege, findet er die Klasse und alles ist wunderbar.

Die Frage: woran liegt das? Versucht er u.U. schon das Objekt zu instanziieren bevor er den kompletten Classpath gelesen hat? Und, ganz wichtig, wie könnte ich das Problem lösen?

Hier der Classpath:
Code:
java -cp \lib\position.jar;lib\framework.jar;lib\jdom.jar;\lib\OB.jar;\lib\OBNaming.jar;. -jar myJar.jar
(wie man sieht benutze ich Windows, sollte aber ja egal sein.)



Grüße
Arvodan
 
Dir is schon klar das

\lib\position.jar;

Nicht lib\position.jar ist


Wenn du mit \ anfängst, geht der dir ins Root Verzeichnis (also C:\lib\position.jar)

Wohingegene lib\position.jar im aktuellen Verzeichnis sucht!


Schreib aber am besten .\ dann isses sicher das aktuelle Verzeichnis

Auf gut deutsch:

\lib\position.jar;lib\framework.jar;lib\jdom.jar;\lib\OB.jar;\lib\OBNaming.jar

der CP ist total fürn Arsch!

mach die \ vorne weg und merk dir das in Zukunft, wenn du immer ins gleiche Verzeichnis zugreifst, dann sollten auch alle Einträge mit dem gleichen Ding anfangen!!

Das ist schon mal Fehlereleminierung 1!
 
der \ am Anfang des Classpath war ein Tippfehler meinerseits, sorry.

Hab aber mittlerweile die Lösung gefunden:

:meld:

Startet man ein Programm mit -jar startet das die ganze Anwendung in nem encapsulated-Mode der den Classpath ignoriert. Die Lösung ist, auf das -jar zu verzichten. Statt dessen legt man die .jar file in den Classpath und ruft die Main classe direkt auf. Dann funktioniert das ganze.

Hier gefunden: forum.java.sun.com/thread.jspa?forumID=31&threadID=568603

Code:
java -cp lib\position.jar;lib\framework.jar;lib\jdom.jar;\lib\OB.jar;\lib\OBNaming.jar;.\myJar.jar;.;  mypackage.mySubPackage.MainClass

Da soll man mal drauf kommen.... :shock:


Danke für die Bemühungen.

Grüße
Arvodan
 
Naja, das wusste ich auch :bae:

Habs aber vergessen zu erwähnen (bzw gar net dran gedacht)


Meine (Unsere) Programm starte ich sowieso nie mit -jar 😉
 
Jou..wir jetzt auch nicht mehr....

Nebenbei: das aktuelle Verzeichnis muss doch nicht zwingend im Classpaht sein. Oder? Hab ich noch nie gemacht, und gab auch keine Probleme.Bisher. (Hier ist es sogar völlig unnötig, da das Shellscript das die Anwendung startet ein eigenes Verzeichnis hat.)

Grüße
Arvodan
 
Naja, das aktuelle Verzeichnis muss nur dann drinnen sein, wenn du mit class Dateien arbeitest!

Er durchsucht nämlich Verzeichnisse nur nach class Dateien und net nach jar Dateien (sonst würde es ja reichen, wenn man einfach ein Verzeichnis sagt)


Ich habs zwar auch drinnen, muss man aber wenn man mit jar Dateien arbeitet net machen!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben