错误:在 CentOS 7 上无法使用 OpenJDK 和 Oracle Java 找到或加载主类

错误:在 CentOS 7 上无法使用 OpenJDK 和 Oracle Java 找到或加载主类

在 CentOS 7.2 Linux 上,我已成功下载并安装Oracle 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 一起运行(没有错误)。

更新:

是的,我必须将类文件移动到thepackagename目录下,然后它才能工作:

# 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

相关内容