CLASSPATH + Packages

Zertos

Mitglied
Guten Abend,
viele von euch kennen ja bestimmt das Problem mit der CLASSPATH Variable und dem folgenden Java Fehler:
Exception in thread "main" java.lang.NoClassDefFoundError

Meine Systemumgebungsvariable CLASSPATH hat folgenden Inhalt:
C:\Users\User\Desktop\Fachhochschule\Objektorientierte Programmierung I\Java

So nun hab ich für mein aktuelles Testat einen Ordner Testat in dem Java Ordner erstellt.
Alle Java Dateien, die in diesem Ordner liegen haben natürlich
Java:
package Testat;
in der ersten Zeile stehen.

Jetzt bekomme ich aber jedes mal die o.g. Fehlermeldung, wenn ich meine Datei ausführen möchte 🙁
Ich rufe die Datei ganz normal aus dem Ordner Testat auf:
Code:
java Datei
Habe im Testat Ordner eine Kopie der cmd.exe erstellt, damit ich gleich den Pfad (C:\Users\User\Desktop\Fachhochschule\Objektorientierte Programmierung I\Java\Testat) habe und nicht erst per cd in den Ordner wechseln muss.
Nutze zur Zeit noch keine Entwicklungsumgebung.

Betriebssystem ist Windows 7 in der 64 Bit Version.
 
Vergiss die CLASSPATH variable, das bringt nur Ärger mit sich. Lösch sie am besten.
Hast du deine Java Dateien überhaupt kompiliert?
Der Name der Klasse ist übrigens nicht Datei, sondern Testat.Datei
 
ist es eine jar-Datei?

Die Meldung kommt unter anderem, wenn man sie mit "java datei.jar" ausführen will. So geht's: "java -jar datei.jar"
Vielleicht liegt es ja daran.. 😉
 
Ja, die Java Dateien sind natürlich kompiliert 🙂
Interessant. Muss man den Packagenamen trotzdem angeben, obwohl man im Ordner des Programmes ist? 🙂

Also anstatt die CLASSPATH Variable zu verwenden, sollte ich dann mein Programm mit dem -cp Parameter aufrufen?
Was genau ist so schlecht an der Variable? Dass die Programme dann nur auf meinem System laufen?

EDIT: @darekkay: Nein, ist schon eine .java Datei und kompiliert ist es eine .class Datei. Und das .class muss man ja beim Ausführen nicht angeben 🙂
Aber Testat.Test hat funktioniert. Danke 🙂
 
Ja, die Java Dateien sind natürlich kompiliert 🙂
Interessant. Muss man den Packagenamen trotzdem angeben, obwohl man im Ordner des Programmes ist? 🙂
Nein, du darfst dich gar nicht in einem Package Verzeichnis befinden, sondern darüber. Dort rufst du dann java packagename.Klassenname auf.
Also anstatt die CLASSPATH Variable zu verwenden, sollte ich dann mein Programm mit dem -cp Parameter aufrufen?
Was genau ist so schlecht an der Variable? D
Es gibt mehr als ein Java Programm und jedes braucht einen eignen Classpath, wie soll man das mit einer einzigen Variablen abdecken?
Das Ausführungsverzeichnis '.' liegt meistens per default im Classpath, du brauchst also gar keinen Classpath wenn du dich bereits im richtigen Verzeichnis befindest und keine zusätzlichen Bibliotheken einbinden musst.
 
Nein, du darfst dich gar nicht in einem Package Verzeichnis befinden, sondern darüber. Dort rufst du dann java packagename.Klassenname auf.
Danke für die Information. Ging aber auch als ich mich im Testat Verzeichnis befand 🙂

Es gibt mehr als ein Java Programm und jedes braucht einen eignen Classpath, wie soll man das mit einer einzigen Variablen abdecken?
Das Ausführungsverzeichnis '.' liegt meistens per default im Classpath, du brauchst also gar keinen Classpath wenn du dich bereits im richtigen Verzeichnis befindest und keine zusätzlichen Bibliotheken einbinden musst.
Die CLASSPATH Variable kann aber mehrere Pfadangaben enthalten. Pfade werden mit ';' abgetrennt. 🙂
Und da ich im Moment sowieso nur den Java Ordner benutze, brauch ich auch keine verschiedenen Pfade. 🙂
 
Die CLASSPATH Variable kann aber mehrere Pfadangaben enthalten. Pfade werden mit ';' abgetrennt. 🙂
Und da ich im Moment sowieso nur den Java Ordner benutze, brauch ich auch keine verschiedenen Pfade. 🙂
Besser du gewöhnst dir das gar nicht erst an.
Man entwickelt in einer IDE, die regelt den Classpath. Baut man dann eine fertige Anwendung, dann liefert man sie als jar und dort ist der Classpath dann im Manifest hinterlegt.
 

Zurück
Oben