programing

ClassNotFoundException 해결방법

yoursource 2022. 9. 3. 17:02
반응형

ClassNotFoundException 해결방법

Java 응용 프로그램을 실행하려고 하는데 다음 오류가 나타납니다.

java.lang.ClassNotFoundException:

콜론 뒤에 누락된 클래스의 위치가 표시됩니다.하지만 그 장소는 다른 곳에 있기 때문에 없는 것으로 알고 있습니다.해당 클래스의 경로를 업데이트하려면 어떻게 해야 합니까?수업 경로와 관련이 있나요?

클래스 경로는 클래스를 로드할 위치 목록입니다.

이러한 '로케이션'은 디렉토리 파일 또는 jar 파일일 수 있습니다.

디렉토리의 경우 JVM은 클래스를 로드하기 위해 예상되는 패턴을 따릅니다.classpath에 C:/myproject/classes 디렉토리가 있고 com.mycompany 클래스를 로드하려고 합니다.foo는 com이라는 이름의 디렉토리를 클래스 디렉토리에서 찾고 mycompany라는 디렉토리에서 foo.class라는 이름의 파일을 찾습니다.

두 번째 예에서는 jar 파일의 경우 해당 클래스의 jar 파일을 검색합니다.jar 파일은 실제로는 위와 같은 디렉토리의 압축된 모음에 불과합니다.jar 파일을 압축 해제하면 위의 패턴에 따라 다수의 디렉토리 및 클래스 파일을 얻을 수 있습니다.

따라서 JVM은 클래스 정의를 로드하려고 할 때 클래스 경로를 처음부터 끝까지 탐색합니다.예를 들어 classpath에서 다음과 같이 입력합니다.

C:/my project/클래스C:/myproject/lib/stuff.jar;C:/myproject/lib/otherstuff.jar

JVM은 디렉토리 클래스를 먼저 검색한 후 stuff.jar를 검색한 후 마지막으로 otherstuff.jar를 검색하려고 합니다.

ClassNotFoundException이 발생하면 JVM이 클래스 경로 전체를 통과했지만 참조하려는 클래스를 찾지 못했음을 의미합니다.Java 세계에서 흔히 볼 수 있듯이 해결책은 클래스 경로를 확인하는 것입니다.

명령줄에 java -cp를 입력하고 classpath를 지정하여 클래스 경로를 정의합니다.Eclipse와 같은 IDE에서는 클래스 경로를 지정하는 메뉴 옵션이 있습니다.

클래스 패스가 파손되었습니다(Java 월드에서 매우 일반적인 문제).

는 '어울리지 않다'로 .-cp클래스 패스 엔트리를 지정합니다.MF の m m m 。

이것이 내가 지금까지 발견한 가장 좋은 해결책이다.

를 들어, 이 해 보겠습니다.org.mypackage다음 중 하나:

  • Hello World(메인 클래스)
  • 서포트 클래스
  • Util Class(유틸리티 클래스)

으로 「」됩니다.D:\myprogram의 경우) (Windows의 경우)/home/user/myprogram(Linux 우경 ().

파일 구조는 다음과 같습니다.

할 때을 지정합니다.Java 호 、 「 Java 」 、 「 Java 」org.mypackage.HelloWorld다만, 패키지를 정의하는 파일이나 디렉토리의 검색 장소도 Java에 지시할 필요가 있습니다.따라서 프로그램을 시작하려면 다음 명령을 사용해야 합니다.

메모: 위의 작업을 수행해야 합니다.java명령어를 사용할 수 있습니다. 이 않아요.javac. , 「」, 「Directory」가 할 도 있습니다.java 실행할 수 .javac ClassName.java.

클래스 또는 클래스를 포함하는 항아리 경로를 알고 있는 경우 클래스 실행 중에 클래스 경로에 추가합니다.classpath는 다음과 같이 사용할 수 있습니다.

Windows 에서는

java -classpath .;yourjar.jar YourMainClass

UNIX/Linux에서

java -classpath .:yourjar.jar YourMainClass

메이븐을 사용한다면 이것을 사용해 보세요.할 때 합니다.mvn clean install프로그램을 실행하려고 하면 예외가 발생합니다.그래서 프로젝트를 청소하고 다시 실행하면 효과가 있습니다.

저는 이클립스 IDE를 사용합니다.

테스트 실행 시의 경우 Junit을 실행해 .mvn clean test아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 네.

기본 일반 질문 - 가장 간단한 일반 답변)

정보를 바탕으로 간단한 텍스트 에디터와 명령 셸을 사용하여 "Hello World"와 같은 간단한 콘솔 앱을 코딩, 빌드/컴파일 및 실행하는 기본적인 접근 방식을 시도하고 있다고 가정합니다.

다음 오류는 다음 시나리오에서 발생합니다.

..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class

즉, 다음을 사용합니다.

..\SomePath>java HelloWorld

추신. 파일 확장자 .class를 추가해도 동일한 오류가 발생합니다.또, operating system의 환경 변수의 PATH에 Java(JDK/JRE)의 bin 폴더가 있는 것을 확인해 주세요.P.P.P.P.S. 제 가정이 옳았습니까?

사용하는 에 이 합니다.pom.xml:

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <!-- Attach the shade goal into the package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

그것은 당신의 의존(예외적인 이유)을 당신의 병에 넣을 것이다.

참고: 이것은 마지막 병에 부풀려진 모든 종속성을 포함합니다.

하려면 클래스 를 추가합니다.-cp ★★★★★★★★★★★★★★★★★」-classpathE.

java -cp "c:/location/of/file" YourProgram

를 하고 있는 는, 「IDE」를할수 있습니다.project -> build path -> configure build path클래스를 포함하는 외부 JAR을 빌드 경로에 추가하면 정상적으로 작동합니다.

구분자로 ';'를 사용합니다.환경 변수가 올바르게 설정되어 있는 경우는, 설정이 표시됩니다.PATH 및 CLASSPATH가 올바른 경우 윈도는 이러한 명령을 인식합니다.Java 를 인스톨 할 때는, 컴퓨터를 재기동할 필요는 없습니다.

jar 파일의 전체 경로를 CLASSPATH에 추가합니다.Linux 사용 시:export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"다른 방법으로는 CLASSPATH를 편집하지 않고 현재 프로젝트 폴더의 항아리를 압축 해제했습니다.

방법이 통하지 않았다.

사용 1) -cpjar .jar의 풀를 지정합니다.

사용 2) 사용법-cp

3) 현재 프로젝트 폴더에 jar 복사

4) Java jar의 표준 위치에 jar 복사(/usr/share/java)

이 솔루션은 com.mysql.jdbc 클래스에 대해 보고됩니다.mysql-connector-java.5-*.jar의 드라이버. OpenJDK 버전 1.7이 설치된 Linux에서 작동합니다.

이 문제는 Java SDK의 이전 버전이 없고 새 버전이 있는 Java 업데이트 후 Windows에서 발생할 수 있습니다.IDE가 설치되어 있는 Java SDK 버전을 사용하고 있는지 확인합니다(IntelliJ: CTRL + SHIFT + ALT + S).

같은 오류가 발생하여 의존성 충돌 문제라는 것을 깨닫는 데 하루 종일 걸렸습니다.

  • 의 라이브러리를.A ★★★★★★★★★★★★★★★★★」B;
  • 다.A ★★★★★★★★★★★★★★★★★」B 도서관에 C의 다른 버전입니다.Cㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ.A 의존하다C 1.0 ★★★★★★★★★★★★★★★★★」B 의존하다C 2.0;
  • B makes존 exists exists에 있는 합니다.C 2.0;
  • ★★★★★★★★★★★★★★.A에서 "은 "closer"를 사용합니다.C 1.0쌍방에 A ★★★★★★★★★★★★★★★★★」B그리고 이 일에 대해서는 경고도 하지 않는다(나에게는 매우 놀랍다).
  • ★★★★★★★★★★★★★★★★★★★★.B 에만 .C 2.0 ,a ,aClassNotFoundException

한 건 하면 '코드로 이동한다'는 예요.B에서 IDE에만 .C 2.0합니다. , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . C 2.0는 실제로 설치되어 있고 IDE는 이를 인식하지만 응용 프로그램을 실행할 때는 무시됩니다.

이거 정말 날 미치게 했어...

엔 제가 보태야 했어요.C 2.0 나 my my mypom.xml대신 선택될 수 있도록C 1.0.

Maven이 가장 가까운 의존 관계를 선택하는 방법에 대해서는, 다음의 투고를 참조해 주세요.https://stackoverflow.com/a/63815140/7438905

하시면 됩니다.mvn dependency:tree이치노

맨 위로 이동하여 Import 문이 있으면 삭제하고 클래스를 다시 Import합니다.하지만 그렇지 않다면 깨끗이 지으세요.Netbeans 또는 Eclipse 중 어느 쪽을 사용하십니까?

저도 이 문제에 부딪혀서 다른 모든 해결책을 시도해 봤어요.HTML 폴더에는 .class 파일이 없고 .java 파일만 있습니다..class 파일을 추가하자 프로그램은 정상적으로 동작했습니다.

  1. 클래스 경로가 올바르지 않으면 발생할 수 있습니다.

  2. 같은 프로젝트명으로 직렬화 가능 클래스와 역직렬화 가능 클래스를 가정해 보겠습니다.직렬화 가능 클래스를 실행하여 특정 폴더에 직렬화 가능 개체를 만듭니다.이제 데이터 삭제가 필요합니다.그동안 프로젝트 이름을 변경하면 작동하지 않습니다.먼저 serializable 클래스를 실행한 후 파일을 역직렬화해야 합니다.

maven을 사용하는 경우 모든 프로젝트를 maven으로 업데이트하고 스냅샷을 강제로 생성해 보십시오.또한 청소하고 모든 클래스 패스를 다시 만듭니다.그게 내 문제를 해결했어

저는 그냥 했어요.

1. 캐시를 무효화하고 재기동합니다.

2. 문제를 해결한 프로젝트를 재구축하다

#의 .jar를 사용하여 에서 .하려고 했습니다.Process 스튜디오에서는파일을 래스로 합니다. 자바 코드는 이클립스에서 성공적으로 실행되었지만 C# 비주얼 스튜디오에서는 실행되지 않았고 심지어 jar 파일을 직접 클릭해도 항상 다음과 같이 중지되었습니다.ClassNotFoundException:예외.해결책은 Java 프로그램을 "JAR 파일"이 아닌 "실행 가능한 JAR 파일"로 내보내는 것이었습니다.츠키노

여러 (서드파티)**라이브러리확장**어플리케이션클래스를 추가한 경우

그러면 일어날 수 있어요.

위해서는 을 설정해야 .multiDexEnabled true 해서 '확장'을 해서 쓰도록 하겠습니다.ApplicationMultiDexApplication.

해결될 거예요.

Java가 문제의 원인이 되고 있는 클래스에 대해 거짓말을 하는 경우가 있습니다.

이 에러는 클래스 B와 클래스 B에 의존하는 클래스 A를 java가 로드하려고 하면 발생할 수 있습니다.

경우에 따라서는 Java는 문제가 B일 때 클래스 A를 로드할 수 없다고 보고합니다.

마지막으로 이 문제가 발생한 것은 클래스 A에 클래스 B를 로드한 스태틱필드 또는 스태틱인테셜라이저가 포함되어 있는 경우입니다.

따라서 클래스 경로가 올바른지 확인한 후(실제로 시작 시 풀 클래스 경로를 덤프합니다) 클래스 A에서 바이너리 컷을 수행합니다.

즉, A에 있는 코드의 반을 삭제합니다.

그래도 문제가 해결되지 않으면 문제가 해결될 때까지 나머지 절반을 제거합니다.

이 경우 class not found 예외로 던져진 클래스에 ssl 증명서와 관련된 속성이 있습니다.일식을 닫고 "Run as Administrator"로 열면 문제가 해결되었습니다.일식은 허가와 관련된 문제가 있기 때문에 이러한 예외를 둘 것이다.

이 문제는 "Java Language Support" 플러그인을 Visual Studio Code에서 0.66.0에서 0.67.0으로 업그레이드한 후 발생합니다.

다운그레이드백으로 같은 코드를 문제없이 실행할 수 있게 되었습니다.

프로젝트를 새로운 머신으로 이동했거나 git에서 Import한 경우, 이것을 시도해 보십시오.

  1. class > Run as > Run Configuration 우클릭
  2. 주요 클래스 참조를 삭제하다
  3. [적용] > [닫기]
  4. 다시 class > run as java application을 오른쪽 클릭합니다.

그것은 나에게 효과가 있었다.

터미널에서 Java 코드를 실행했는데 Class Path를 추가하는 것은 다음과 같은 해결책입니다.
> java -cp <JAR file> <JAVA Class file>
를 들어, 「」라고 하는 것은,c:\code\prototype-app\target\classes>java -cp ..\prototype-app-1.0-SNAPSHOT.jar com_stree.app.DetectLabels


OS: Windows 10
JAVA: 15.0.1
:

미사용 수입품을 삭제해 버려서 문제가 해결되었습니다.처음부터 클래스를 찾지 않으면 클래스를 찾을 수 없습니다.

질문이 늦어서 미안하지만 가장 간단한 말로 설명해 드리겠습니다.javac <programname>을 입력하는 경우.java> 컴파일러는 프로그램을 체크하고 오류를 검출합니다.먼저 명령 프롬프트에서 실행한 것과 같은 디렉토리에 프로그램이 있는지 확인합니다.그런 다음 a를 만듭니다.프로그램의 클래스 파일입니다.전남편에게.프로그램 이름이 Test.java일 경우 작성된 클래스 파일은 다음 행에서 실행되는 Test.class여야 합니다.때때로 java는 당신의 .class에 다른 이름을 붙이고, 그 이름을 사용하면 출력을 얻을 수 있습니다.

모든 코드를 try block에 넣은 후 catch block에서 예외 포착

try
{
    // code
}
catch(ClassNotFoundException e1)
{
    e1.getmessage();
}

언급URL : https://stackoverflow.com/questions/17408769/how-do-i-resolve-classnotfoundexception

반응형