錯誤:在 CentOS 7 上無法使用 OpenJDK 和 Oracle Java 找到或載入主類

錯誤:在 CentOS 7 上無法使用 OpenJDK 和 Oracle Java 找到或載入主類

在 CentOS 7.2 Linux 上我已成功下載並安裝甲骨文Java和:

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

另外已經安裝了 OpenJDK:

# 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

我可以使用以下命令在兩者之間切換:

# 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:

並查看版本:

# 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

現在請解決我的問題 -

我創建一個簡單的 java 文件,名為TheClassName.java

package thepackagename;

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

成功編譯它javac TheClassName.java(在同一目錄中生成TheClassName.class文件)後,不幸的是我無法運行它:

# java -cp . thepackagename.TheClassName
Error: Could not find or load main class thepackagename.TheClassName

這是另一個嘗試:

# 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

設定另一個環境變數也沒幫助:

# export CLASSPATH=.

類似的命令在 Windows 7 上運行良好,我也嘗試將TheClassName.class檔案從那裡複製到 Linux。

請協助,請不要建議將此問題標記為重複,因為正如您在上面看到的,我已經嘗試了大部分建議。

SELINUX 已關閉 ( SELINUX=disabled),伺服器在幾週前安裝完畢,作為 LAMP 與 MySQL/PostgreSQL/Apache/WordPress 一起使用(沒有錯誤)。

更新:

是的,我必須將類別文件移到thepackagenamedir 下,然後它就可以工作:

# ls thepackagename
TheClassName.class

# java -cp . thepackagename.TheClassName
Hello World!

我甚至可以創建一個test.jar文件,它現在仍然有效:

# zip -r test.jar thepackagename
  adding: thepackagename/ (stored 0%)
  adding: thepackagename/TheClassName.class (deflated 31%)

# java -cp test.jar thepackagename.TheClassName
Hello World!

答案1

如果該類別位於套件中:

package thepackagename;

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

然後從錯誤的目錄呼叫它會導致:

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

必須使用其完全限定名稱來呼叫它:

java -classpath . thepackagename.TheClassName

且該命令必須從同一目錄該目錄所在的位置thepackagename。這表示您必須建立一個名為 的新目錄thepackagename並移入TheClassName.class其中,然後從該目錄的父目錄執行上述命令thepackagename

相關內容