Java Classpath einrichten

F

Flo80

Mitglied
Thread Starter
Dabei seit
19.02.2003
Beiträge
60
Reaktionspunkte
0
Hallo allerseits,

ich fange gerade an der Uni mit Java an und komme auch nach ausführlichem googeln einfach nicht dahinter wie ich den Classpath unter OS X korrekt einrichte bzw. welche Verzeichnisse drinstehen müssen (bzw. ob ich noch irgendwas anderes konfigurieren muss). Ich habe zwar Netbeans installiert, was auch funktioniert (im Gegensatz zu Eclipse), aber ich möchte gerade zum Einstieg auch in der Konsole arbeiten.

Ich habe es schon mal, entsprechend dem Hinweis auf einer anderen Seite, mit diesem Pfad versucht:
export CLASSPATH=./System/Library/Frameworks/JavaVM.framework/Classes

...und er wird mit echo $CLASSPATH auch angezeigt. Trotzdem krieg ich im Terminal keine Programme zum laufen.

Für eine kleine Schritt für Schritt Anleitung wäre ich sehr dankbar, ich kenne mich mit den Terminalbefehlen nämlich nicht sonderlich gut aus.

Danke, Flo
 
Mit dem Classpath direkt kann ich jetzt nicht direkt weiterhelfen, aber schau dir mal BlueJ an, gerade für Anfänger sehr gut :)
 
"Trotzdem krieg ich im Terminal keine Programme zum laufen." sagt leider nicht so viel ueber dein Problem aus.

Was sind denn die genauen Fehlermeldungen?
 
Zuletzt bearbeitet:
Es waere schoen gewesen, wenn du eine Fehlermeldung oder etwas in der Art gepostet haettest, sowie eine genauere Beschreibung was genau du vorhast.

Ich vermute mal, dass du einfach versuchst ein simples Programm zu kom pilieren und auszufuehren.

Falls du den NoClassDefFoundError bekommst, stelle sicher, dass du dich im richtigen Verzeichnis befindest und das Programm richtig aufrufst.

Zum kompilieren:
javac HelloWorld.java

Zum ausfuehren:
java HelloWorld
(Hier kein .class anhaengen)

Sollte normalerweise alles ohne Spielereien mit dem Classpath funktionieren.

So... waere nun schoen zu wissen was genau du vor hast. :D
 
Der Aufruf
java HalloWelt
führt zu:
Exception in thread "main" java.lang.NoClassDefFoundError: HalloWelt

Wenn ich´s mit dem vollständigen Pfad versuche
/Users/.../HalloWeltapp/build/classes/halloweltapp java HalloWelt versuche kommt:
-bash: /Users/.../HalloWeltapp/build/classes/halloweltapp: is a directory
es passiert aber nichts...
 
[Wuah, Unfug geschrieben, sorry]
 
Zuletzt bearbeitet:
hier kommt auch
Exception in thread "main" java.lang.NoClassDefFoundError: /Users...
 
Hmm sieht mir so aus, als haettest du oder ein Programm den Classpath schon anders gesetzt.

Geh mal in das Verzeichnis der .class Datei und:
java -cp ./ HalloWelt
 
Standardmaessig sehen die erforderlichen Variablen uebrigens so aus:

$HOME/Library/Java
$NEXT_ROOT/Library/Java
$NEXT_ROOT/System/Library/Java
$NEXT_ROOT/Network/Library/Java
$NEXT_ROOT/System/Library/Frameworks/JavaVM.framework/Classes/classes.jar
$NEXT_ROOT/System/Library/Frameworks/JavaVM.framework/Classes/ui.jar
 
Hast du denn den Java-Quellcode zuerst kompiliert, so dass eine .class Datei daraus geworden ist?

Kompilieren: javac HalloWelt.java
Ausführen java HalloWelt

Wichtig ist auch, dass die Datei genauso heißt wie die Klasse im Quelltext, beachte auch: CaSEseNSiTiV ;)
 
Hallo,

bei einem "normal" installierten 10.x brauchst Du zunächst überhaupt keine Klassenpfade anzugeben:

(1) Mit einem beliebigen Editor (z.B. jEdit) eine Java-Quelldatei schreiben.
(2) Terminal starten und in das Verzeichnis wechseln, in dem die Quelldatei gespeichert ist
(3) Mit javac dateiname.java die Quelldatei kompilieren
(4) Mit java dateiname (ohne c und ohne .java) das Programm starten.

Das wars.

Auf den ersten Blick komplizierter wird es, wenn Du das Ergebnis NetBeans und xCode im Terminal starten willst. Beide IDE's erzeugen normalwerweise Java-Archive (sog. jar-Dateien), die mit der Option -jar gestartet werden müssen (also z.B. java -jar dateiname). Beide IDE's ergänzen die Manifest-Datei um den Namen und ggf. den Pfad von eingebundenen Klassen (z.B. ein Archiv um JDBC von MySQL zu nutzen); bei xCode habe ich manuell gemacht.

Peter
 
Danke, für die schnellen Tipps!

Ich hab die Dateien in der Tat mit Netbeans compiliert und es sind auch jar-Files.

Ich hab´s mit
java -jar HalloWelt versucht und bekam

Unable to access jarfile HalloWelt

Ich werde jetzt mal versuchen ein Programm direkt im Terminal zu kompilieren.


@cynic: kannst Du mir noch sagen, wie ich diese Variablen in den Classpath bekomme
 
Fuer die bash:
export CLASSPATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.3/Classes/classes.jar"

Fuer die tcsh:
setenv CLASSPATH "/System/Library/Frameworks/JavaVM.framework/Versions/1.3/Classes/classes.jar"

Willst du mehr als nur ein Verzeichnis angeben, einfach die Pfade mit Doppelpunkt trennen.

Umgebungsvariablen setzt du mit dem setenv Befehl, also zB:
setenv TEST "Habe Hunger"
Das kannst du dann auch mit echo ausgeben.

Allerdings... diese Art von Spielchen ist nur solange persistent, wie du die Terminal Session hast. Wenn du das Terminal schliesst, ist die Variable auch weg. Um das ganz laenger am leben zu erhalten muss man die Konfigurationsdatei der Shell bearbeiten und es dort hart eintragen.
 
Hallo,

versuch doch einfach mal java -jar HalloWelt.jar

Die von @cynic genannten Umgebungsvariablen werden zentral gesetzt und Du braucht normalerweise nix einzustellen. Alles was Du da manuell machst, führt nur zu zusätzlichen Problemen.

Die CLASSPATH-Variable ist für gewöhnlich nur von Bedeutung, wenn Du Classen aus -jar-Dateien verwenden möchtest, die Du von Dritter Seite bezogen oder selbst erstellt hast. Die bindest Du am besten in Netbeans ein, indem Du beim entsprechenden Projekt die rechte Maustaste betätigst, das Menü Properties auswählst und in der Kategorie Libraries die entsprechenden Einträge vornimmst.

Bei Netbeans steht das Ergebnis Deiner Projekte im Dist-Verzeichnis des Projektes. Alles was da drin ist gehört zusammen - dann kann nix passieren und alles läuft wunderbar.

Peter
 
Fuer die bash:
export CLASSPATH="/System/Library/Frameworks/JavaVM.framework/Versions/1.3/Classes/classes.jar"

Fuer die tcsh:
setenv CLASSPATH "/System/Library/Frameworks/JavaVM.framework/Versions/1.3/Classes/classes.jar"

Willst du mehr als nur ein Verzeichnis angeben, einfach die Pfade mit Doppelpunkt trennen.

Das ist auf einem normalen Mac OS X nur dann erforderlich, wenn eine andere Version des JDK verwendet werden soll, als in der aktuellen Version des OS von Apple vorgesehen ist (bei mir ist 10.3.9 und 1.4.2.12 für die VM aktuell). Die Version 1.3 sollte nur dann verwendet werden, wenn es zwingend erforderlich ist.

Peter
 
Das ist auf einem normalen Mac OS X nur dann erforderlich, wenn eine andere Version des JDK verwendet werden soll, als in der aktuellen Version des OS von Apple vorgesehen ist (bei mir ist 10.3.9 und 1.4.2.12 für die VM aktuell). Die Version 1.3 sollte nur dann verwendet werden, wenn es zwingend erforderlich ist.

Peter

Ja sicher... der Inhalt ist hier trivial, ich habe ihm nur ein Beispiel fuer das setzen von Umgebungsvariablem geben wollen. ;)
 
Jippie, das compilieren und ausführen im Terminal hat zum ersten mal geklappt :) . Mit den jar-Files funktionierts noch nicht. Aber jetzt bin ich zumindest schon einen Schritt weiter! Den Classpath werd ich jetzt wohl erstmal so lassen wie er ist...

Noch mal Danke!
 
Hey Glueckwunsch! :)
 
Zurück
Oben Unten