Eclipse 컴파일 오류 : '클래스 이름'유형의 계층 구조가 일치하지 않습니다


139

Java로 작성된 일부 오픈 소스 소프트웨어를 다운로드하고 Eclipse를 사용하여 컴파일하려고 시도했습니다. 일부 파일에서 " '클래스 이름'유형의 계층 구조가 일치하지 않습니다 " 라는 오류가 발생했습니다 . 이러한 오류의 원인은 무엇이고 어떻게 해결합니까?

답변:


161

존재하지 않는 인터페이스를 구현하려고하거나 존재하지 않는 클래스를 확장하고 있음을 의미합니다.

Eclipse를 새로 고치십시오.

작동하지 않으면 빌드 경로에없는 JAR에 대한 참조가 있음을 의미 할 수 있습니다. 프로젝트의 클래스 경로를 확인하고 인터페이스 또는 클래스를 포함하는 jar이 포함되어 있는지 확인하십시오.


2
비슷한 헛된 상황에서 Spring Tool Suite 에서이 오류를 일으킨 Maven 종속성이 있었으므로 해결책은 문제의 종속성에 대해 Maven> 를 수행하는 것이 었습니다 Download Source.
MrLore

당신에게 kudos @lagrantmere
Shailesh Pratapwar

2
또한 부모가 컴파일되고 있는지 확인하십시오. 필자의 경우 슈퍼 클래스가 존재한다는 것을 알았지 만 실제로 제대로 컴파일되지 않았습니다.
Joseph Rajeev Motha

2
나는 누락 된 (일식에서 개명 된) 인터페이스를 구현하고있는 추상 클래스를 확장하는 클래스를 가졌다
Aquarius Power

4
필자의 경우 클래스 경로 (jar)에서 WAS 클래스를 확장했지만 클래스 경로에없는 다른 항아리에있는 세 번째 클래스를 확장했습니다.
JustinKSU

15

때로는 필요한 항아리를 추가 할 때 발생하지만 IT에 필요한 항아리는 포함하지 않습니다. 내 경우에는 tomcat / lib에 모든 항아리를 추가하면이 문제를 해결하는 데 도움이되었습니다. 웹 응용 프로그램을 작성 중입니다.


고마워, 이것은 내 문제였다. GWT 라이브러리를 포함했지만 Java 서블릿 API jar (이 경우 Jetty의 servlet-api-3.1.jar)이 누락되었습니다.
Jamie

13

오류를 확인하십시오 ( "마커"탭). 나는 또한 다음과 같은 오류가 있었다 :

프로젝트의 필수 라이브러리에 대한 아카이브를 읽을 수 없습니다 ...

그것이 수정되었을 때 "일관되지 않은 오류"는 사라졌습니다.

실제로 빌드 경로에 항아리를 추가했지만 어떤 이유로 든 오류가 발생하여 읽을 수 없었습니다.

프로젝트의 필수 라이브러리에 대한 아카이브를 읽을 수 없거나 유효한 ZIP 파일이 아닙니다.

대신 "외부 항아리"로 추가했습니다. 도움이되었고 모든 컴파일 문제는 더 이상 없었습니다!


5

JDK를 새 버전으로 업그레이드 한 후이 문제가 발생했습니다. 프로젝트 속성 / Java 빌드 경로에서 라이브러리에 대한 참조를 업데이트해야했습니다.


4

내가 한 건 더 있어요 올바른 프로젝트 경로를 제공하고 이클립스로 가져 오십시오.

그런 다음 프로젝트-> 정리-> 모든 프로젝트 정리로 이동하십시오.



2

클래스 경로에있는 라이브러리 파일의 일부 클래스가 다른 jar 파일에있을 수있는 존재하지 않는 클래스를 참조하는 경우이 오류가 표시됩니다. 내가 추가하지 않은 경우 여기,이 오류가 발생 org.springframework.beans-3.1.2.RELEASE.jar하고로부터 클래스를 확장했다 org.springframework.jdbc.core.support.JdbcDaoSupport이었다, org.springframework.jdbc-3.1.2.RELEASE.jar나의 클래스 패스를.


2

문제는 잘못된 병을 포함했을 수 있습니다. 나는 같은 문제가 있었고 그 이유는 프로젝트의 빌드 경로에 잘못된 기본 JRE 라이브러리를 포함했기 때문입니다. 다른 버전으로 Java를 설치했으며 다른 버전의 Java JRE 파일을 포함하고있었습니다. (내 시스템에 JRE 1.6을 설치했고 이전에 설치된 Java로 인해 JRE 라이브러리 1.7이 빌드 경로에 포함되어있었습니다) 빌드 경로에 포함 된 JRE 라이브러리가 올바른 버전인지 확인할 수 있습니다. 시스템에 설치 한 Java 버전


2

Eclipse Juno 에서이 문제가 발생했습니다. 근본 원인은 일부 스프링 항아리가 일시적인 maven 종속성에 의해 포함되었지만 잘못된 버전에 포함되었다는 것입니다.

따라서 모든 모듈 (또는 적어도 가장 중요한 코어, Bean, 컨텍스트, aop, tx 등)이 동일한 버전인지 봄으로 모듈 식 프레임 워크를 사용하는지 확인해야합니다.

문제를 해결하기 위해 잘못된 버전의 일시적 종속성을 피하기 위해 maven 의존성 제외를 사용했습니다.


2

오류 : "클래스 이름"유형의 계층 구조에 일관성이없는 오류가 있습니다.

해결책 : class OtherDepJar {}->는 "other.dep.jar" 안에 있습니다.

DepJar 클래스 확장 OtherDepJar {}->는 "dep.jar" 안에 있습니다.

ProblematicClass 확장 DepJar {}->는 현재 프로젝트 안에 있습니다.

dep.jar이 프로젝트의 클래스 경로에 있지만 other.dep.jar이 프로젝트의 클래스 경로에없는 경우 Eclipse는 "유형의 계층 구조 ... 일관되지 않은 오류"를 표시합니다.


1

나에게 문제는 잘못된 수입 때문이었습니다. 실제로 v7 지원 라이브러리를 추가 한 후 가져 오기를 업데이트해야합니다.

프로젝트의 각 클래스에 대해 다음과 같이 수행하여 수정할 수 있습니다 .

  1. import android.[*]각 클래스 에서을 사용하여 모든 행을 삭제하십시오.
  2. 가져 오기 재구성 : 상황에 맞는 메뉴에서 소스 / 가져 오기 가져 오기 또는 (CTRL + SHIFT + O)를 선택하십시오.
  3. 프롬프트가 표시되면 라이브러리를 선택하십시오 android.support.[*](및 아님 android.[*]).

1

내 maven pom.xml에없는 종속성이 없기 때문입니다.

예를 들어, 광대역 전자 상거래 데모 사이트 구현을위한 통합 테스트를 만들고 싶었습니다.

구성 파일과 기본 테스트 클래스를 재사용하기 위해 broadleaf 상거래의 통합 테스트가 포함 된 broadleaf jar을 포함 시켰습니다. 이 프로젝트에는 포함되지 않은 다른 테스트 종속성이 있으며 "일관되지 않은 계층 구조"오류가 발생했습니다.

broadleaf / pom.xml 및 broadleaf / pom.xml의 각 종속성에 대한 버전을 제공하는 연관된 특성 변수에서 "테스트 종속성"을 복사 한 후 오류가 사라졌습니다.

속성은 다음과 같습니다.

    <geb.version>0.9.3</geb.version>
    <spock.version>0.7-groovy-2.0</spock.version>
    <selenium.version>2.42.2</selenium.version>
    <groovy.version>2.1.8</groovy.version>

종속성은 다음과 같습니다.

<dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>integration</artifactId>
            <type>jar</type>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.broadleafcommerce</groupId>
            <artifactId>broadleaf-framework</artifactId>
            <version>${blc.version}</version><!--$NO-MVN-MAN-VER$ -->
            <classifier>tests</classifier>
        </dependency>
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.3</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>2.5.1</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymockclassextension</artifactId>
            <version>2.4</version>
            <type>jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>5.9</version>
            <type>jar</type>
            <classifier>jdk15</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-core</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.gebish</groupId>
            <artifactId>geb-spock</artifactId>
            <version>${geb.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-chrome-driver</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
  <!-- Logging -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.12</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <version>2.3.1</version>
                <type>jar</type>
                <scope>test</scope>
            </dependency>

1

확장 클래스에 문제가 있으면 위의 오류 메시지가 표시됩니다.

class Example extends Example1 {

}

문제를 해결하다 Example1


1

나는 똑같은 정확한 문제 마커를 가지고 있었고 실제로는 첫 번째 구현 ( "슈퍼"인 추상 메소드)에서 오버라이드가 아닌 @Override 주석을 제거하여 해결했습니다.


1

필자의 경우 많은 클래스의 가져 오기 참조에 여분의 단어가 포함되었습니다. 올바른 가져 오기를 갖도록 모든 파일을 편집하여 해결했습니다. 편집을 수동으로 시작했습니다. 그러나 패턴을 보았을 때 이클립스에서 찾기를 사용하여 패턴을 자동화했습니다. 이것은 오류를 해결했습니다.



0

나는이 문제도 가지고 있었다 ... 나는이 예외를 던지고있는 클래스의 계층 구조가 일식에 의해 루트 클래스로 다시 추적 될 수 없다는 것을 알았습니다 ...

내 경우에는 A, B 및 C의 3 가지 Java 프로젝트가 있습니다 .A 및 B는 maven 프로젝트이고 C는 일반 Java Eclipse 프로젝트입니다.

프로젝트 A에는 인터페이스 "interfaceA"가 있습니다 ... 프로젝트 B에는 인터페이스 "interfaceB"를 확장하는 인터페이스 "interfaceB"가 있습니다. 프로젝트 C에는 "interfaceB"를 구현하는 콘크리트 클래스 "classC"가 있습니다.

"프로젝트 C"는 빌드 경로에 "프로젝트 B"를 포함하고 있지만 "프로젝트 A"는 포함하지 않았습니다 (그래서 오류의 원인이되었습니다) .... "C"의 빌드 경로 내에 "프로젝트 A"를 포함시킨 후 모든 것이 정상으로 돌아 왔습니다 ...


0

OSGi가있는 프로젝트에서 LabelProvider를 확장하는 클래스가 있는데 오류가 발생했습니다. 해결책은 다음과 같습니다. org.eclipse.jface.viewers와 같은 단일 패키지를 가져 오는 대신 manifest.mf의 필수 플러그인에 org.eclipse.jface 추가


0

Eclipse 프로젝트를 가져 오는 경우 1. 프로젝트 특성 아래에서 Java 빌드 경로 설정으로 이동하십시오. 2. JRE 시스템 라이브러리에 오류 기호가 첨부 된 경우이를 두 번 클릭하여 라이브러리 편집 창을 엽니 다. 3. 실행 환경을 올바른 Java 버전의 시스템으로 변경하거나 할당 된 단일 선택 단추를 선택하여 다른 설정 편집을 선택하십시오. 그들에게. 4. 완료를 클릭하십시오


0

"Google Plugin for Eclipse"를 설치하지 않고 Eclipse에서 GWT 프로젝트를 가져올 때이 문제가 발생합니다. "Google Plugin for Eclipse"를 설치하면이 오류가 사라집니다.


0

프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭하고 "Java Build Path"를 선택하십시오. "Java Build Path"에서 라이브러리를 볼 수 있어야합니다. Eclipse는 해당 라이브러리에서 오류를 표시합니다. 이러한 문제를 해결하면 문제를 해결하는 데 도움이됩니다.


0

내 클래스가 새로운 인터페이스를 확장 한 지점에서 git merge 를 수행 한 후이 오류가 발생했습니다 . Eclipse 의 패키지 탐색기 프레임 에서 파일 트리 를 새로 고치기 (F5) 는 충분했습니다 .

이클립스는 모든 것을 올바르게 업데이트하지 않았기 때문에 클래스는 아직 존재하지 않는 인터페이스를 확장하고있었습니다. 새로 고침 후 모든 오류가 사라졌습니다.


0

IBM에서 얻은 Eclipse Oxygen에서 IBM JDK 8을 사용하여 Eclipse Photon 및 Oracle JDK 8로 전환해야했습니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.