Fehler: Hauptklasse konnte mit OpenJDK und Oracle Java unter CentOS 7 nicht gefunden oder geladen werden

7161
Alexander Farber

Auf CentOS 7.2 Linux habe ich Oracle Java erfolgreich heruntergeladen und installiert mit:

# rpm -Uvh jdk-8u91-linux-x64.rpm 

Auch dort ist bereits OpenJDK 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 die Version 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 dem erfolgreichen Kompilieren mit javac TheClassName.java(das die TheClassName.classDatei im selben Verzeichnis erzeugt) 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 

Das Festlegen einer anderen Umgebungsvariablen hilft auch nicht:

# export CLASSPATH=. 

Ein ähnlicher Befehl unter Windows 7 funktioniert gut und ich habe versucht, die TheClassName.classDatei von dort auch nach Linux zu kopieren .

Bitte helfen Sie und schlagen Sie nicht vor, diese Frage als doppelt zu kennzeichnen, da ich, wie Sie oben sehen, die meisten Vorschläge bereits ausprobiert hat.

Der SELINUX ist aus ( SELINUX=disabled) und der Server wurde vor einigen Wochen installiert und dient als LAMP mit MySQL / PostgreSQL / Apache / WordPress.

AKTUALISIEREN:

Ja, ich musste die Klassendatei unter thepackagenamedir verschieben und dann funktioniert es:

# ls thepackagename TheClassName.class  # java -cp . thepackagename.TheClassName Hello World! 

Ich kann sogar eine test.jarDatei erstellen und sie funktioniert jetzt noch:

# zip -r test.jar thepackagename adding: thepackagename/ (stored 0%) adding: thepackagename/TheClassName.class (deflated 31%)  # java -cp test.jar thepackagename.TheClassName Hello World! 
1

1 Antwort auf die Frage

1
karel

Wenn die Klasse in einem Paket ist:

package thepackagename;  public class TheClassName { public static final void main(String[] args) { System.out.println("Hello World!"); } } 

Ein Aufruf aus dem falschen Verzeichnis führt dann zu:

Error: Could not find or load main class thepackagename.TheClassName 

Es muss mit seinem vollständig qualifizierten Namen aufgerufen werden:

java -classpath . thepackagename.TheClassName 

Dieser Befehl muss aus dem gleichen Verzeichnis aufgerufen werden, in dem das thepackagenameVerzeichnis vorhanden ist. Dies bedeutet, dass Sie ein neues Verzeichnis erstellen thepackagenameund TheClassName.classin dieses thepackagenameVerzeichnis verschieben müssen. Führen Sie dann den obigen Befehl aus dem übergeordneten Verzeichnis des Verzeichnisses aus.

Oh, Sie haben 100% Recht und das Verschieben der Datei in `thepackagename / TheClassName.class` hilft (und macht wahrscheinlich meine Frage zu einem Duplikat) ... Allerdings [mein eigentliches Programm] (https://github.com/afarber/ Jetty-Newbie / Tree / Master / WebsocketHandler), bestehend aus wenigen JAR-Dateien, wird immer noch nicht ausgeführt. Ich muss mehr nachforschen und werde eine separate Frage stellen. Alexander Farber vor 7 Jahren 0
Um Java-Dateien mit einem externen jar auszuführen, führen Sie `java -cp.: / Path / to / jar / file MyCompiledFile` aus, wobei Sie` / path / to / jar / file` durch den vollständigen Pfad zu Ihrer externen .jar-Datei ersetzen. karel vor 7 Jahren 1