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

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

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.classeine 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.classDatei 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 thepackagenameVerzeichnis verschieben und dann funktioniert es:

# ls thepackagename
TheClassName.class

# java -cp . thepackagename.TheClassName
Hello World!

Ich kann sogar eine test.jarDatei 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 thepackagenameVerzeichnis existiert. Das bedeutet, dass Sie ein neues Verzeichnis mit dem Namen erstellen thepackagenameund TheClassName.classdorthin wechseln müssen. Anschließend führen Sie den obigen Befehl aus dem übergeordneten Verzeichnis des thepackagenameVerzeichnisses aus.

verwandte Informationen