Java에서 NoClassDefFoundError가 발생하는 이유는 무엇입니까?


530

NoClassDefFoundErrorJava 애플리케이션을 실행할 때을 받고 있습니다. 일반적으로 이것의 원인은 무엇입니까?


1
올바른 구문으로 Java 프로그램을 실행하지 않으면 발생할 수 있다고 생각합니다. 예를 들어 루트 bin 폴더에서 전체 패키지 이름 (예 : my.package.myClass)으로 클래스를 호출해야합니다. 내가 할 수 있다면 좀 더 구체적이지만 자바 사람은별로 없습니다. 나는 이것을 몇 번 엉망으로 만드는 것을 기억합니다.
Frank hadder

17
@BoltClock 수많은 중복을 지적하려면 정식 질문이 필요합니다. 왜 이럴 수 없습니까?
Raedwald 2016 년

21
커뮤니티가 더 가치있는 것으로 답할 수 있도록 승인 된 답변을 변경하는 것을 고려해 보셨습니까?
Martin Smith

답변:


264

이것은 코드가 의존하는 클래스 파일이 있고 컴파일 타임에 존재하지만 런타임에는 찾을 수 없을 때 발생합니다. 빌드 시간과 런타임 클래스 경로의 차이점을 찾으십시오.


1
소스 파일을 잘못된 네임 스페이스 / 패키지에 넣을 때이 오류가 발생했습니다. 나는 어디서나 넣을 수 있다고 생각 했으며 컴파일러는 행복했습니다. 런타임이 행복하기 위해서는 더 부지런해야 했음이 밝혀졌습니다.
CenterOrbit

1
파일 업로드 중에 서버 메모리가 부족한 경우이 오류가 한 번 발생했습니다. 업로드를 시도 할 때마다 다른 오류가 발생합니다. 결국 그것은 충분한 힙 공간이 없다고 나에게 말했다.
James M. Lay

81
이 답변은 반드시 사실 일 필요는 없으며 많은 사람들에게 오도 될 것입니다! 아래 Jared의 더 나은 답변을 참조하십시오.
Dave L.

4
@DaveL. 감사! 400 개 이상의 공감 율에 대한 Jared의 답변은 다음과 같습니다! -4 up (down?) 투표를 한 답변은 그 위에 있습니다. SO의 답변 순서 논리에 대해 비린내가 있습니다.
Saurabh Patil

1
이것은 누군가에게 장거리이지만 문제의 클래스에 잘못된 문자로 초기화 된 SimpleDateFormat이 포함되어 있기 때문에이 오류가 발생했습니다 ( 'T'대신 중간에 T가 있음).
Ryan D

817

컴파일 타임과 런타임 사이의 클래스 경로 불일치 때문일 수도 있지만 반드시 그런 것은 아닙니다.

이 경우 두세 가지 예외를 머리에 똑바로 유지하는 것이 중요합니다.

  1. java.lang.ClassNotFoundException 이 예외는 클래스가 클래스 경로에서 발견되지 않았 음을 나타냅니다. 이것은 클래스 정의를로드하려고했지만 클래스가 클래스 경로에 존재하지 않았 음을 나타냅니다.

  2. java.lang.NoClassDefFoundError 이 예외는 JVM이 클래스 정의에 대한 내부 클래스 정의 데이터 구조를 찾아서 찾지 못했음을 나타냅니다. 이것은 클래스 경로에서로드 할 수 없다는 것과 다릅니다. 일반적으로 이것은 이전에 클래스 경로에서 클래스를로드하려고 시도했지만 어떤 이유로 실패했습니다. 이제 클래스를 다시 사용하려고합니다 (따라서 마지막으로 실패했기 때문에로드해야합니다). 이전에로드하지 못했기 때문에 다시로드하려고 시도하지 않습니다 (그리고 다시 실패 할 것으로 의심 됨). 이전 실패는 ClassNotFoundException 또는 ExceptionInInitializerError (정적 초기화 블록의 실패를 표시 함) 또는 기타 여러 가지 문제점 일 수 있습니다. 요점은 NoClassDefFoundError가 반드시 클래스 경로 문제 일 필요는 없다는 것입니다.


30
NoClassDefFoundError의 원인을 언급 해 주셔서 감사합니다. 이것은 많은 도움이되었습니다! 필자의 경우 ExceptionInInitializerError가 전에 발생했기 때문에 정적 블록의 오류에 대해 알았습니다.
토마스

@Jared,을받을 때 Error: Could not find or load main class어떤 카테고리의 오류로 분류됩니까?
Vikram

@Pops : 동사 "try"의 객체를 지정하기 위해 언어를보다 장황하게 만들었습니다. :)
Jared

1
@Vikram "주 클래스를 찾거나로드 할 수 없음"은 Java 예외가 아니며 시작 프로그램 (JAR 및 기본 매니페스트 속성을 검사 함)으로 인해 발생합니다.
eckes

2
클래스에 오류나 예외를 발생시키는 정적 초기화가있는 경우에도 ClassNotFoundException이 발생합니다. 그들은 아마도 그 행사의 다른 이름을 선택했을 것입니다.
coladict

124

다음은 설명하는 코드입니다 java.lang.NoClassDefFoundError. 자세한 설명 은 Jared의 답변 을 참조하십시오 .

NoClassDefFoundErrorDemo.java

public class NoClassDefFoundErrorDemo {
    public static void main(String[] args) {
        try {
            // The following line would throw ExceptionInInitializerError
            SimpleCalculator calculator1 = new SimpleCalculator();
        } catch (Throwable t) {
            System.out.println(t);
        }
        // The following line would cause NoClassDefFoundError
        SimpleCalculator calculator2 = new SimpleCalculator();
    }

}

SimpleCalculator.java

public class SimpleCalculator {
    static int undefined = 1 / 0;
}

3
그리고 그 이유는 첫 시도 후에 jvm이 이미 작동하지 않을 것을 알고 두 번째로 다른 예외를 던지기 때문입니다.
ikamen

@ikamen 분명히 SimpleCalculator0으로 나눈 후 클래스 초기화에 실패 했습니까? 누군가이 행동에 대한 공식 문서에 대한 참조가 있습니까?
ᴠɪɴᴄᴇɴᴛ

4
@PhilipRego '순수한'NoClassDefFoundError의 의미가 무엇인지 잘 모르겠습니다. 처음 new SimpleCalculator()호출하면 ArithmeticException으로 인해 ExceptionInInitializerError가 발생합니다. 두 번째로 호출 new SimpleCalculator()하면 다른 클래스만큼 NoClassDefFoundError가 발생합니다. 요점은 SimpleCalculator.class 이외의 이유로 런타임에 클래스 경로에없는 이유로 NoClassDefFoundError를 얻을 수 있다는 것입니다.
harperska

36

Java에서 NoClassDefFoundError

정의:

  1. Java Virtual Machine은 컴파일 타임에 사용 가능한 런타임에 특정 클래스를 찾을 수 없습니다.

  2. 컴파일 타임 동안 클래스가 있었지만 런타임 동안 Java 클래스 경로에서 사용할 수없는 경우

여기에 이미지 설명을 입력하십시오

예 :

  1. 클래스가 Classpath에 있지 않다는 것을 알 수있는 확실한 방법은 없지만 System.getproperty ( "java.classpath")를 인쇄하여 적어도 클래스 클래스를 인쇄 할 수 있습니다. 실제 런타임 클래스 경로에 대한 아이디어.
  2. NoClassDefFoundError의 간단한 예는 클래스가 누락 된 JAR 파일에 속하거나 JAR이 클래스 경로에 추가되지 않았거나 때로는 내 동료 중 하나가 tibco.jar을 tibco_v3.jar로 변경하고 프로그램이 다음과 같은 누군가에 의해 jar의 이름이 변경된 경우입니다. java.lang.NoClassDefFoundError로 실패하고 무엇이 잘못되었는지 궁금합니다.

  3. 작동 할 것이라고 생각하는 클래스 경로와 함께 명시 적으로 -classpath 옵션으로 실행하려고 시도하고 작동하면 누군가가 Java 클래스 경로를 재정의한다는 짧은 신호입니다.

  4. JAR 파일에 대한 권한 문제로 인해 Java에서 NoClassDefFoundError가 발생할 수도 있습니다.
  5. XML 구성의 오타도 Java에서 NoClassDefFoundError를 일으킬 수 있습니다.
  6. 패키지에 정의 된 컴파일 된 클래스가 JApplet의 경우와 같이로드하는 동안 동일한 패키지에 없으면 Java에서 NoClassDefFoundError가 발생합니다.

가능한 해결책:

  1. 이 클래스는 Java 클래스 경로에서 사용할 수 없습니다.
  2. J2EE 환경에서 여러 클래스 로더 중 클래스의 가시성보다 java.lang.NoClassDefFoundError가 발생할 수있는 경우보다 자세한 내용은 예제 및 시나리오 섹션을 참조하십시오.
  3. 로그 파일에서 java.lang.ExceptionInInitializerError를 확인하십시오. 정적 초기화 실패로 인한 NoClassDefFoundError는 매우 일반적입니다.
  4. NoClassDefFoundError는 java.lang.LinkageError의 서브 클래스이므로 네이티브 라이브러리와 같은 종속성 중 하나를 사용할 수없는 경우에도 발생할 수 있습니다.
  5. 모든 시작 스크립트가 Classpath 환경 변수를 대체합니다.
  6. jar 명령을 사용하여 프로그램을 실행 중일 수 있으며 매니페스트 파일의 ClassPath 속성에 클래스가 정의되어 있지 않습니다.

자원:

NoClassDefFoundError를 해결하는 3 가지 방법

java.lang.NoClassDefFoundError 문제 패턴


1
좋은 대답입니다. 나는 당신이 제안한 모든 것을 시도했지만 여전히 그 문제가 있다고 생각합니다. 스프링으로 작업하는 jar로 인해 이들 중 일부를 제외 할 수 있지만 java.sql (제 경우에는 하나의 sap db 드라이버)에서는 좋아하지 않는 것 같습니다.
JE Carter II

실제로 System.getproperty ( "java.class.path")라고합니다.
RIJIK

33

런타임에 발견 된 호환되지 않는 클래스의 클래스로 코드를 컴파일 할 때 때때로 NoClassDefFound 오류가 발생한다는 것을 알았습니다. 내가 기억하는 특정 인스턴스는 아파치 축 라이브러리입니다. 실제로 런타임 클래스 경로에 2 가지 버전이 있었고 오래된 버전과 호환되지 않는 버전을 선택했지만 올바른 버전이 아니므로 NoClassDefFound 오류가 발생했습니다. 이것은 비슷한 명령을 사용하는 명령 줄 앱에있었습니다.

set classpath=%classpath%;axis.jar

다음을 사용하여 올바른 버전을 선택할 수있었습니다.

set classpath=axis.jar;%classpath%;

4
같은 문제가 있었다. Java7로 war 파일을 컴파일했지만 Tomcat 설치가 Java6을 사용하고있는 것으로 나타났습니다. 환경 변수를 업데이트해야했습니다
duvo

4
이런 일이 발생하면 Java가 혼란에 빠졌다고 말할 것입니다. 이것이 사실이라면 +2. 아직 확인할 수 없습니다. 발견되면 다시 할 것입니다 +1 (댓글로 작성)
supernova

7

이것이 지금까지 찾은 최고의 솔루션 입니다.

org.mypackage클래스를 포함 하는 패키지가 있다고 가정 해보십시오 .

  • HelloWorld (메인 클래스)
  • 지원 클래스
  • UtilClass

이 패키지를 정의하는 파일은 디렉토리 D:\myprogram(Windows) 또는 /home/user/myprogram(Linux) 에 실제로 저장됩니다 .

파일 구조는 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

Java를 호출 할 때 실행할 애플리케이션 이름을 지정합니다 org.mypackage.HelloWorld.. 그러나 패키지를 정의하는 파일과 디렉토리를 찾을 위치를 Java에 알려야합니다. 따라서 프로그램을 시작하려면 다음 명령을 사용해야합니다. 여기에 이미지 설명을 입력하십시오


6

Maven 과 함께 Spring Framework 를 사용 하고 있었고 프로젝트 에서이 오류를 해결했습니다.

클래스에 런타임 오류가있었습니다. 속성을 정수로 읽는 중이지만 속성 파일에서 값을 읽을 때 값이 두 배였습니다.

Spring은 런타임이 실패한 라인에 대한 전체 스택 추적을 제공하지 않았습니다. 단순히 말했다 NoClassDefFoundError. 그러나 MVC에서 가져 오는 네이티브 Java 응용 프로그램으로 실행했을 때 ExceptionInInitializerError원인이 무엇인지, 어떻게 오류를 추적했는지 알 수 있습니다.

@xli의 대답은 내 코드에서 무엇이 잘못되었는지에 대한 통찰력을 제공했습니다.


1
서블릿을 프로그래밍 할 때도 같은 일이 일어났습니다 ( NoClassDefFoundError실제로 인해 ExceptionInInitalizerError발생했습니다 DateTimeParseException). 약간 오해의 소지가 있습니까? 나는 그들이 그것을 그렇게 만들어야 할 이유가 있었음을 알고 있지만, 적어도 작은 힌트를 갖는 것이 좋을 NoClassDefFoundError것입니다. ExceptionInInitializerError다시 던지는 것이 훨씬 더 명확합니다. 때로는이 둘의 연결이 그렇게 분명하지 않을 수도 있습니다.
Bartłomiej Zieliński

5

런타임 클래스 로더가로드 한 클래스가 Java 루트 로더가 이미로드 한 클래스에 액세스 할 수없는 경우 NoClassFoundError가 발생합니다. java에 따라 다른 클래스 로더가 다른 보안 도메인에 있기 때문에 jvm은 루트 로더에 의해 이미로드 된 클래스가 런타임 로더 주소 공간에서 분석되는 것을 허용하지 않습니다.

'java -javaagent : tracer.jar [YOUR java ARGS]'로 프로그램을 실행하십시오.

로드 된 클래스와 클래스를로드 한 로더 env를 표시하는 출력을 생성합니다. 클래스를 확인할 수없는 이유를 추적하면 매우 유용합니다.

// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5

import java.lang.instrument.*;
import java.security.*;

// manifest.mf
// Premain-Class: ClassLoadTracer

// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class

// java -javaagent:tracer.jar  [...]

public class ClassLoadTracer 
{
    public static void premain(String agentArgs, Instrumentation inst) 
    {
        final java.io.PrintStream out = System.out;
        inst.addTransformer(new ClassFileTransformer() {
            public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {

                String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
                out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);

                // dump stack trace of the thread loading class 
                Thread.dumpStack();

                // we just want the original .class bytes to be loaded!
                // we are not instrumenting it...
                return null;
            }
        });
    }
}

1
연결이 끊어졌습니다. 보관 된 버전을 시도해보십시오 web.archive.org/web/20131216000019/https://blogs.oracle.com/...이
avgvstvs

5

많은 것을 볼 수있는 흥미로운 사례는 NoClassDefFoundErrors다음과 같습니다.

  1. throwRuntimeException에서 static클래스의 블록Example
  2. 그것을 가로 채십시오 (또는 테스트 케이스 에서 던져지는 것처럼 중요하지 않은 경우 )
  3. 이 클래스의 인스턴스를 만들어보십시오 Example

static class Example {
    static {
        thisThrowsRuntimeException();
    }
}

static class OuterClazz {

    OuterClazz() {
        try {
            new Example();
        } catch (Throwable ignored) { //simulating catching RuntimeException from static block
            // DO NOT DO THIS IN PRODUCTION CODE, THIS IS JUST AN EXAMPLE in StackOverflow
        }

        new Example(); //this throws NoClassDefFoundError
    }
}

NoClassDefErrorExceptionInInitializerError정적 블록 과 함께 발생 RuntimeException합니다.


UNIT TESTSNoClassDefFoundErrors 에서 볼 때 특히 중요 합니다 .

어떤 방식으로 static테스트간에 블록 실행을 "공유" 하지만 초기 ExceptionInInitializerError는 하나의 테스트 사례에 불과합니다. 문제가있는 Example클래스 를 사용하는 첫 번째 클래스입니다. Example클래스 를 사용하는 다른 테스트 사례 는 그냥 던져 질 것 NoClassDefFoundErrors입니다.


4
이것은 실제 생활에서 유용한 조언입니다. 클래스 속성 이니셜 라이저와 동일한 상황이 발생했습니다. 로그에서 실제 문제를 한 번만 볼 수 있습니다. 클래스가로드되면 (또는 어쨌든 시도) 모든 것을 다시 시작해야합니다.
DailyFrankPeter

4

아래 기술은 여러 번 도움이되었습니다.

System.out.println(TheNoDefFoundClass.class.getProtectionDomain().getCodeSource().getLocation());

여기서 TheNoDefFoundClass는 프로그램에서 사용하는 동일한 라이브러리의 이전 버전에 대한 환경 설정으로 인해 "손실 된"클래스입니다. 클라이언트 소프트웨어가 자체적 인 클래스 로더와 가장 인기있는 lib의 수많은 고대 버전으로 무장 한 지배적 인 컨테이너에 배포 될 때 가장 자주 발생합니다.



1

모든 모듈에 대해 preDexLibraries를 비활성화하여 문제를 해결했습니다.

dexOptions {
        preDexLibraries false
        ...

1

NoClassDefFoundError또한 정적 초기화 프로그램이 런타임에서 사용할 수없는 자원 번들 (예 : 영향을받는 클래스가 META-INF디렉토리 에서로드하려고 시도 하지만 존재하지 않는 특성 파일)을로드하려고 할 때 발생할 수 있습니다 . 잡지 않으면 NoClassDefFoundError때로는 전체 스택 추적을 볼 수 없습니다. 이를 극복하기 위해 일시적으로 다음 catch절을 사용할 수 있습니다 Throwable.

try {
    // Statement(s) that cause the affected class to be loaded
} catch (Throwable t) {
    Logger.getLogger("<logger-name>").info("Loading my class went wrong", t);
}

이것은 올바르지 않습니다. 누락 된 리소스 는이 오류를 발생시키지 않습니다. 수업 이없는 경우에만받을 수 있습니다 .
Stephen C

@StephenC 어쩌면 나는 그 부분을 더 강조해야하지만, 썼다 for example a properties file that the affected class tries to load from the META-INF directory. 이것은 실제로 나에게 일어 났 NoClassDefFoundError으며 누락 된 속성 파일을 추가하여 문제를 해결할 수있었습니다 . 언급 된 상황 에서이 오류가 발생하지 않기 때문에이 답변을 정확하게 추가했습니다.
ᴠɪɴᴄᴇɴᴛ

1
누락 된 자원 파일 해당 예외를 트리거 할 수 있는 유일한 방법 은 static초기화 에서 자원 파일을로드하려고 시도하는 것입니다 ... 확인되지 않은 예외를 트리거하고 클래스를 초기화 했기 때문에 설명에서 매우 중요한 것을 놓쳤습니다 . 실패. 정적 초기화에서 전파되는 검사되지 않은 예외는 그렇게합니다.
Stephen C

내가 틀렸다면 (즉 static, 초기화 실패로 인한 것이 아님 ), 동작을 보여주는 실제 예 (예 : MCVE)를보고 싶습니다.
Stephen C

1
@StephenC 그래도 당신은 옳습니다. (이 문제가 발생한 경우를 찾아 보았고 실제로 리소스 번들을로드하려고하는 정적 초기화 프로그램과 관련이 있습니다. 원인에 대한 내 설명을 보강 / 수정해야합니다.이 점을 지적 해 주셔서 감사합니다 아웃.
ᴠɪɴᴄᴇɴᴛ

1

프로젝트에 다른 모듈의 Maven 종속성을 추가 할 때이 오류가 발생했습니다.이 문제는 마침내 -Xss2m프로그램의 JVM 옵션 (JDK5.0 이후 기본적으로 1 메가 바이트)에 추가 되어 해결되었습니다 . 프로그램에 클래스를로드 할 수있는 스택이 충분하지 않은 것으로 생각됩니다.


0

누군가가 java.lang.NoClassDefFoundError: org/apache/log4j/Logger오류 때문에 여기에 오면 , 내 경우에는 log4j 2를 사용했기 때문에 생성되었지만 (제공되는 모든 파일을 추가하지는 않았지만) 일부 종속성 라이브러리는 log4j 1을 사용했습니다. 해결책은 Log4j를 추가하는 것이 었습니다 1.x 브리지 : log4j-1.2-api-<version>.jarlog4j와 함께 제공 되는 jar 2. log4j 2 마이그레이션 에 대한 추가 정보 .


0

동일한 프로젝트의 서로 다른 두 개의 체크 아웃 사본

필자의 경우 문제는 Eclipse가 동일한 프로젝트의 서로 다른 두 사본을 구별 할 수 없다는 점이었습니다. 하나는 트렁크 (SVN 버전 제어)에 잠겨 있고 다른 하나는 한 번에 한 지점에서 작동합니다. JUnit 테스트 사례로 작업 복사본의 한 가지 변경 사항을 시도했습니다. 여기서 개인 내부 클래스를 공개 클래스로 추출하는 작업이 포함되었습니다. 작업하는 동안 프로젝트의 다른 복사본을 열어 다른 부분을 살펴보십시오. 변경이 필요한 코드의 일부. 어느 시점에서, NoClassDefFoundError개인 내부 계급이 존재하지 않았다고 불평하는 팝업 이 나타났습니다. 스택 추적을 두 번 클릭하면 잘못된 프로젝트 복사본의 소스 파일로 이동했습니다.

프로젝트의 트렁크 사본을 닫고 테스트 사례를 다시 실행하면 문제가 해결되었습니다.


0

이 오류는 확인되지 않은 Java 버전 요구 사항 으로 인해 발생할 수 있습니다 .

필자의 경우 SDKMAN을 사용하여 Java 9에서 Java 8로 전환하여 고급 오픈 소스 프로젝트를 구축하는 동안이 오류를 해결할 수있었습니다 ! .

sdk list java
sdk install java 8u152-zulu
sdk use java 8u152-zulu

그런 다음 아래 설명에 따라 새로 설치하십시오.


사용하는 경우 메이븐을 할, 일반적으로 떠오르고 - 빌드 도구로, 때로는 도움이 깨끗한 '설치'빌드를 사용하지 테스트와 함께 .

mvn clean install -DskipTests

이제 모든 내장 설치되어, 당신은 가서 테스트를 실행할 수 있습니다.

mvn test


0

특정 패키지 이름을 가진 IDE에서 코드 파일을 복사하고 터미널을 사용하여 코드 파일을 실행하려고 할 수도 있습니다. 코드에서 패키지 이름을 먼저 제거해야합니다. 이것은 나에게 일어난다.


0

제 경우에는 JDK 버전의 불일치로 인해이 오류가 발생했습니다. Intelij에서 응용 프로그램을 실행하려고 시도했지만 작동하지 않았지만 명령 줄에서 실행했습니다. Intelij가 설정 한 Java 11 JDK로 실행하려고했지만 명령 행에서 Java 8 JDK로 실행 중이었기 때문입니다. 파일> 프로젝트 구조> 프로젝트 설정> 프로젝트 SDK에서 해당 설정을 전환 한 후 나에게 도움이되었습니다.


0

모두가 Java 구성 관련 내용, JVM 문제 등에 대해 여기에서 이야기합니다. 제 경우에는 오류가 이러한 주제와 전혀 관련이 없으며 매우 사소하고 해결하기 쉬운 이유가 있습니다. 스프링 부트 애플리케이션).


0

Liberty 서버로 작업하는 JavaEE의 NoClassDefFoundError와 관련하여 흥미로운 문제가 있습니다. IMS 자원 어댑터를 사용 중이고 server.xml에 이미 imsudbJXA.rar에 대한 자원 어댑터가있었습니다. imsudbXA.rar에 대한 새 어댑터를 추가하면 DLIException, IMSConnectionSpec 또는 SQLInteractionSpec에 대한 인스턴스 객체에 대해이 오류가 발생하기 시작합니다. 나는 왜 그런지 알 수 없지만 imsudbXA.rar 만 사용하여 작업을 위해 새 server.xml을 만들어서 해결했습니다. server.xml에서 여러 리소스 어댑터를 사용하는 것이 좋습니다. 방금 살펴볼 시간이 없었습니다.


-1

Java가 런타임에서 클래스 A를 찾을 수 없습니다. 클래스 A는 다른 작업 공간에서 Maven 프로젝트 ArtClient에있었습니다. 그래서 ArtClient를 Eclipse 프로젝트로 가져 왔습니다. 내 프로젝트 중 두 개가 ArtClient를 종속성으로 사용하고있었습니다. 이 라이브러리 참조를 프로젝트 참조로 변경했습니다 (빌드 경로-> 빌드 경로 구성).

그리고 문제는 사라졌습니다.


-1

나는 같은 문제를 겪었고 몇 시간 동안 주식을 가지고있었습니다.

해결책을 찾았습니다. 제 경우에는 그로 인해 정적 메소드가 정의되었습니다. JVM이 해당 클래스의 다른 오브젝트를 작성할 수 없습니다.

예를 들어

private static HttpHost proxy = new HttpHost(proxyHost, Integer.valueOf(proxyPort), "http");

-6

SRC 라이브러리에서 두 개의 파일을 제거한 후이 메시지가 나타 났으며 다시 가져 왔을 때이 오류 메시지가 계속 나타납니다.

내 해결책은 : Eclipse를 다시 시작하십시오. 그 이후로이 메시지를 다시 보지 못했습니다 :-)


4
그것은 가장 많이 투표 된 답변에 의해 설명됩니다. 처음 컴파일 할 때 파일이 있었고 일부 파일을 제거하고 클래스가 삭제되었으므로 런타임에 ClassNotFound를 얻은 다음 다시 종료했지만 Eclipse는 그렇지 않았습니다. 생성 된 클래스가 여전히 누락되었지만 Eclipse를 다시 시작한 후 작업 공간이 새로 고쳐지고 클래스를 다시 사용할 수 있었지만 일반적으로 솔루션이나 해결 방법이 아니므로 솔루션에서 런타임에 누락 된 클래스 / jar을 찾으십시오. 클래스 패스.
호세 마누엘 고메즈 Alvarez

-7

module:app및 에서 일치하는지 확인하십시오 module:lib.

android {
    compileSdkVersion 23
    buildToolsVersion '22.0.1'
    packagingOptions {
    }

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 11
        versionName "2.1"
    }

3
솔루션이이 일반적인 문제와 어떤 관련이 있습니까?
Taavi Ilves

샘플 구성이 균형이 맞지 않습니다 (three {s및 two }). 고칠 수 있습니까?
피터 Mortensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.