
Unter CentOS 7.2 Linux habe ich erfolgreich heruntergeladen und installiertOracle Javamit:
# rpm -Uvh jdk-8u91-linux-x64.rpm
Außerdem ist OpenJDK bereits installiert:
# rpm -qa | grep -i jdk
java-1.8.0-openjdk-headless-1.8.0.91-0.b14.el7_2.x86_64
java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64
jdk1.8.0_91-1.8.0_91-fcs.x86_64
Ich kann mit diesem Befehl zwischen den beiden wechseln:
# alternatives --config java
There are 2 programs which provide 'java'.
Selection Command
-----------------------------------------------
* 1 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre/bin/java
+ 2 /usr/java/jdk1.8.0_91/jre/bin/java
Enter to keep the current selection[+], or type selection number:
Und sehen Sie sich die Version an mit:
# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
# javac -version
javac 1.8.0_91
Nun zu meinem Problem bitte -
Ich erstelle eine einfache Java-Datei mit dem Namen TheClassName.java
:
package thepackagename;
public class TheClassName {
public static final void main(String[] args) {
System.out.println("Hello World!");
}
}
Nach erfolgreicher Kompilierung javac TheClassName.java
(wodurch TheClassName.class
eine Datei im selben Verzeichnis erstellt wird) kann ich es leider nicht ausführen:
# java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName
Hier noch ein Versuch:
# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/jre
# $JAVA_HOME/bin/java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName
Auch das Setzen einer weiteren Umgebungsvariable hilft nicht:
# export CLASSPATH=.
Ein ähnlicher Befehl funktioniert unter Windows 7 gut und ich habe versucht, die TheClassName.class
Datei von dort auch nach Linux zu kopieren.
Bitte helfen Sie und schlagen Sie nicht vor, diese Frage als Duplikat zu markieren, da ich, wie Sie oben sehen, die meisten Vorschläge bereits ausprobiert habe.
SELINUX ist ausgeschaltet ( SELINUX=disabled
) und der Server wurde vor einigen Wochen installiert und dient (ohne Fehler) als LAMP mit MySQL/PostgreSQL/Apache/WordPress.
AKTUALISIEREN:
Ja, ich musste die Klassendatei unter thepackagename
Verzeichnis verschieben und dann funktioniert es:
# ls thepackagename
TheClassName.class
# java -cp . thepackagename.TheClassName
Hello World!
Ich kann sogar eine test.jar
Datei erstellen und es funktioniert immer noch:
# zip -r test.jar thepackagename
adding: thepackagename/ (stored 0%)
adding: thepackagename/TheClassName.class (deflated 31%)
# java -cp test.jar thepackagename.TheClassName
Hello World!
Antwort1
Wenn sich die Klasse in einem Paket befindet:
package thepackagename;
public class TheClassName {
public static final void main(String[] args) {
System.out.println("Hello World!");
}
}
Der Aufruf aus dem falschen Verzeichnis führt zu:
Error: Could not find or load main class thepackagename.TheClassName
Es muss mit seinem vollqualifizierten Namen aufgerufen werden:
java -classpath . thepackagename.TheClassName
Und dieser Befehl muss aufgerufen werden von dergleiches Verzeichnisin dem das thepackagename
Verzeichnis existiert. Das bedeutet, dass Sie ein neues Verzeichnis mit dem Namen erstellen thepackagename
und TheClassName.class
dorthin wechseln müssen. Anschließend führen Sie den obigen Befehl aus dem übergeordneten Verzeichnis des thepackagename
Verzeichnisses aus.