오류: CentOS 7에서 OpenJDK 및 Oracle Java를 사용하여 기본 클래스를 찾거나 로드할 수 없습니다.

오류: CentOS 7에서 OpenJDK 및 Oracle Java를 사용하여 기본 클래스를 찾거나 로드할 수 없습니다.

CentOS 7.2 Linux에서 성공적으로 다운로드하여 설치했습니다.오라클 자바와 함께:

# 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

다음 명령을 사용하여 2개 사이를 전환할 수 있습니다.

# 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=.

TheClassName.classWindows 7에서도 비슷한 명령이 잘 작동하며 거기에서 Linux로도 파일을 복사해 보았습니다 .

도와주세요. 이 질문을 중복으로 표시하지 마세요. 위에서 볼 수 있듯이 이미 대부분의 제안을 시도했기 때문입니다.

SELINUX는 꺼져 있고( SELINUX=disabled) 서버는 몇 주 전에 설치되어 MySQL/PostgreSQL/Apache/WordPress에서 (오류 없이) LAMP 역할을 합니다.

업데이트:

예, 클래스 파일을 dir 아래로 이동해야 했고 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.

관련 정보