PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Classpath



pLaTTi
27-10-2005, 19:26
Diesen Text hatte ich schonmal in ein JavaForum geschrieben, allerdings scheinen die meisten da mit Windows zu arbeiten, also hier nochmal, es wäre nett, wenn hier jemand weiterweis:

Hallo, bin neu in der Java-Welt und zeitgleich auch neu in der Linux-Welt.

Ich besitze das Linux-System SUSE 10.0.
Habe es installiert und alles ist damit soweit in Ordnung, nun wollte ich auch Java drauf hauen.

Also habe ich mir das ( Filename ) jdk-1_5_0_04-linux-i586.bin runtergeladen.
Nun habe ich es unter /home/platti/java/ installiert und mit meinem Mozilla symbolisch verlinkt, was alles anscheinend gut geklappt hat.
Dann hab ich mir jedit runtergeladen, installiert und mein HelloWorld.java erstellt, um zu testen ob alles funktioniert.
Dann kam schon beim javac eine Fehlermeldung: javac: command not found.
Gut nun googelte ich schnell den Fehler und fand, dass man den kompletten Pfad angeben sollte, also bei mir: /home/platti/java/bin/javac
HelloWorld.java und siehe da es funktioniert, ich hatte eine HelloWorld.class in meinem bin Ordner!
Nun dachte ich, dass man den Pfad ja nicht immer eingeben muss, da es bei mir in der Uni auch nicht so ist, aber dieses Prob, wollte ich später lösen, nachdem das Programm gelaufen ist.
Also schnell: java HelloWorld.class --> Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
Ich: WAS?
Gegooglet: Irgendwas mit CLASSPATH gefunden und das der CLASSPATH, also wo java die .class Dateien sucht nicht finden kann.
Danach tausende von Zeugs durchsucht und gemacht darunter: unset CLASSPATH / echo $CLASSPATH bla bla UND java -classpath /home/platti/java/bin <-- da dachte ich, es muss ja funktionieren und was sagt er wenn ich den Befehl eingebe:
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
bla bla, also sowas wie ne Hilfe ... sprich der nimmt meinen Befehl nicht an.

Kann mir einer der sich auskennt bitte helfen? Ich werd gleich verrückt icon_sad.gif

mfg DER pLaTTi

peschmae
27-10-2005, 19:43
export PATH=$PATH:/home/platti/java/bin/javac

in deine .bashrc im Homeverzeichnis schreiben damit er javac findet.

Zum CLASSPATH: Am besten machst du ein "export CLASSPATH=." dann sollte er die Klasse finden solange du dich, wenn du den java-Befehl ausführst, im selben Verzeichnis befindest in dem die .class-Datei ist.
Wobei eigentlich sollte er das glaub ich auch sonst. Merkwürdig dass das nicht geht.

MfG Peschmä

pLaTTi
27-10-2005, 20:09
Ok, ich habe die Befehlszeile in die .bashrc reingeschrieben und zwar so:

export PATH=$PATH:/home/platti/java/bin/javac

und auch so

#export PATH=$PATH:/home/platti/java/bin/javac

leider schreibt er immer noch bash: javac: command not found

Ok, naja .class hab ich dann nochmal normal gemacht ... und bevor ich "java HelloWorld" und "java HelloWorld.class" eingegeben hatte "export CLASSPATH=." eingegeben.

NIX, einfach NIX.

Ich werd verrückt, langsam frag ich mich, obs an meiner Installation liegt ...

peschmae
27-10-2005, 20:29
Oh, das sollte
export PATH=$PATH:/home/platti/java/bin
heissen. Also der Pfad zum Ordner mit dem Executable und nicht zum Executable direkt.

Das mit dem java muss übrigens definitiv
java HelloWorld
heissen (und nicht java HelloWorld.class oder so); aber wenn das mit so bzw. classpath nicht geht kann ich dir leider auch nicht weiterhelfen.

MfG Peschmä

pLaTTi
27-10-2005, 20:44
Ich habe eine fantastische Entdeckung gemacht, nachdem ich im YaST Kontrollzentrum unter "Internet&Netzwerk" --> "Webbrowser" --> "Java & Java-Script" --> "Pfad zur ausführbaren Java-Datei oder zu "java"" den Pfad /home/platti/java eingegeben und nun gibt er wenn ich im Terminal /home/platti/java/bin/java HelloWorld auch korrekt "Hello World!" aus, sprich, ich kann endlich anfangen ein bisschen zu proggen.

Allerdings würde ich gerne den Pfad nicht angeben ... sprich java -classpath /home/platti/java/bin sollte dann schon gehen, ohne das ich den Pfad immer eingeben muss.

Und die Korrektur in .bashrc geht leider auch nicht :(

undefined
27-10-2005, 20:54
Aha - du verwendest SuSE auch mal nett zu wissen ;)
Siehe bitte unter /etc/java/java.conf und /etc/profile.d/alljava.sh nach ;)

pLaTTi
28-10-2005, 00:52
@undefinied

Ich will dir ja nicht zu Nahe treten, aber wer lesen kann ist klar im Vorteil. Siehe dazu auch den Quote meines Eingangspostes!



Ich besitze das Linux-System SUSE 10.0.
Habe es installiert und alles ist damit soweit in Ordnung, nun wollte ich auch Java drauf hauen.


Dein Tipp werde ich gleich mal verfolgen.

pLaTTi
28-10-2005, 14:57
Ok, also ich habe beide Dateien mal geöffnet:

Eine wichtige Frage habe ich nocht wegen Linux, was bedeutet denn immer das $-Zeichen z.B. vor Path angaben

Meine alljava.sh sieht so aus:

#
# /etc/profile.d/alljava.sh
#
# send feedback to http://www.suse.de/feedback

#
# This script sets some environment variables for default java.
# Affected variables: PATH, JAVA_BINDIR, JAVA_HOME, JRE_HOME,
# JDK_HOME, SDK_HOME
#

__libdir=lib
if [ -x /usr/lib64/jvm/java ] || [ -x /usr/lib64/jvm/jre ] ; then
__libdir=lib64
fi

if [ -x /usr/$__libdir/jvm/java/bin/java ] || [ -x /usr/$__libdir/jvm/java/bin/jre ] ; then
export JAVA_BINDIR=/usr/$__libdir/jvm/java/bin
export JAVA_ROOT=/usr/$__libdir/jvm/java
export JAVA_HOME=/usr/$__libdir/jvm/java
if [ -x /usr/$__libdir/jvm/java/jre/bin/java ] ; then
export JRE_HOME=/usr/$__libdir/jvm/java/jre
else
export JRE_HOME=/usr/$__libdir/jvm/java
fi
unset JDK_HOME
unset SDK_HOME
if [ -x /usr/$__libdir/jvm/java/bin/javac ] ; then
# it is development kit
if [ -x /usr/$__libdir/jvm/java/bin/jre ] ; then
export JDK_HOME=/usr/$__libdir/jvm/java
else
export JDK_HOME=/usr/$__libdir/jvm/java
export SDK_HOME=/usr/$__libdir/jvm/java
fi
fi
else
if [ -x /usr/$__libdir/jvm/jre/bin/java ] ; then
# it is IBMJava2-JRE or SunJava2-JRE
export PATH=$PATH:/usr/$__libdir/jvm/jre/bin
export JAVA_BINDIR=/usr/$__libdir/jvm/jre/bin
export JAVA_ROOT=/usr/$__libdir/jvm/jre
export JAVA_HOME=/usr/$__libdir/jvm/jre
export JRE_HOME=/usr/$__libdir/jvm/jre
unset JDK_HOME
unset SDK_HOME
fi
fi

unset __libdir


meine java.conf sieht so aus

# System-wide Java configuration file -*- sh -*-
#
# JPackage Project <http://www.jpackage.org/>
# Location of jar files on the system
JAVA_LIBDIR=/home/platti/java
# Location of arch-specific jar files on the system
JNI_LIBDIR=/usr/lib64/java
# Location of 32 bit arch-specific jar files on the system
JNI_LIBDIR32=/usr/lib/java
# Root of all native JVM installations
JVM_ROOT=/usr/lib64/jvm
# Root of all 32 bit JVM installations
JVM_ROOT32=/usr/lib/jvm
# You can define a system-wide JVM root here if you're not using the default one
#JAVA_HOME=$JVM_ROOT/java-bea
# Options to pass to the java interpreter
JAVACMD_OPTS=

den Pfad zu meiner JAVA_LIBDIR hab ich da schon geändert, ich schätze dadurch geht mein javac jetzt auch ohne Angabe des kompletten Pfades, allerdings geht java immer noch nicht

undefined
30-10-2005, 12:24
@undefinied

Ich will dir ja nicht zu Nahe treten, aber wer lesen kann ist klar im Vorteil. Siehe dazu auch den Quote meines Eingangspostes!


Dein Tipp werde ich gleich mal verfolgen.
:D meaculpa


Eine wichtige Frage habe ich nocht wegen Linux, was bedeutet denn immer das $-Zeichen z.B. vor Path angaben
Das Dollar Zeichen besagt das ich um eine bereits gesetzte Variable handelt.


den Pfad zu meiner JAVA_LIBDIR hab ich da schon geändert, ich schätze dadurch geht mein javac jetzt auch ohne Angabe des kompletten Pfades, allerdings geht java immer noch nicht
Java müste gehen weil SuSE eine Verknüpfung auf /usr/bin setzt!
Siehe


find /usr/bin/ -type l -name "*java*"
## oder besser ls bei mir kommt das
ls -l /usr/bin/*java*
lrwxrwxrwx 1 root root 22 2005-04-14 20:49 /usr/bin/java -> /etc/alternatives/java
lrwxrwxrwx 1 root root 23 2005-04-17 13:19 /usr/bin/javac -> /etc/alternatives/javac
lrwxrwxrwx 1 root root 25 2005-04-17 13:19 /usr/bin/javadoc -> /etc/alternatives/javadoc
lrwxrwxrwx 1 root root 23 2005-04-17 13:19 /usr/bin/javah -> /etc/alternatives/javah
lrwxrwxrwx 1 root root 23 2005-04-17 13:19 /usr/bin/javap -> /etc/alternatives/javap