이클립스 컴파일 오류:'클래스 이름' 형식의 계층이 일치하지 않습니다.
자바어로 작성된 오픈 소스 소프트웨어를 다운로드하여 이클립스를 사용하여 컴파일하려고 했습니다.일부 파일에서 "클래스 이름 유형의 계층이 일치하지 않습니다."라는 오류가 발생했습니다.이러한 에러의 원인과 수정 방법은 무엇입니까?
즉, 존재하지 않는 인터페이스를 구현하려고 하거나 존재하지 않는 클래스를 확장하려고 합니다.
이클립스를 재충전해 보세요.
동작하지 않는 경우는, 빌드 패스에 없는 JAR 에 대한 참조가 있는 것을 의미할 가능성이 있습니다.프로젝트의 클래스 경로를 확인하고 인터페이스 또는 클래스가 들어 있는 항아리가 있는지 확인합니다.
필요한 항아리를 추가할 때 발생할 수 있지만 IT에 필요한 항아리는 포함하지 않습니다.제 경우 tomcat/lib에 모든 jars를 추가하면 이 문제를 해결할 수 있었습니다.저는 웹 앱을 만들고 있어요.
오류를 확인합니다("마커" 탭).다음 오류도 있었습니다.
프로젝트에서 필요한 라이브러리의 보관 파일을 읽을 수 없습니다...
이 문제가 해결되자 '지시적 오류'가 사라졌습니다.
실제로 빌드 경로에 jar를 추가했지만 어떤 이유로 인해 오류가 발생하여 읽을 수 없었습니다.
프로젝트에서 필요한 라이브러리의 보관 파일을 읽을 수 없거나 올바른 ZIP 파일이 아닙니다.
그래서 '외부 항아리'로 붙였어요.이것으로 도움이 되었고 컴파일 문제도 없어졌습니다.
JDK를 새 버전으로 업그레이드한 후 이 문제가 발생했습니다.Project Properties/Java Build Path에서 라이브러리에 대한 참조를 업데이트해야 했습니다.
한 건 더 맡았어요.올바른 프로젝트 경로를 지정하고 일식으로 가져옵니다.
다음으로 Project --> Clean --> Clean 모든 프로젝트의 Clean으로 이동합니다.
프로젝트를 치료하거나 이클립스를 재시작해야 합니다.
에 있는 fileclasspath에 수하지 않는 이 오류가 . 이 , 이 했습니다.org.springframework.beans-3.1.2.RELEASE.jar.org.springframework.jdbc.core.support.JdbcDaoSupport에 포함되어 있습니다.org.springframework.jdbc-3.1.2.RELEASE.jar우리 반의 길이야
문제는 잘못된 병을 포함시켰다는 것입니다.저도 같은 문제가 있었습니다.그 이유는 프로젝트의 빌드 패스에 잘못된 디폴트 JRE 라이브러리가 포함되어 있었기 때문입니다.다른 버전의 Java를 설치하고 다른 버전의 Java의 JRE 파일을 포함하고 있었습니다.(JRE 1.6을 시스템에 설치하고 JRE 라이브러리 1.7을 빌드 경로에 포함시킨 것은 Java가 설치되어 있기 때문입니다) 빌드 경로에 포함된 JRE 라이브러리가 시스템에 설치된 Java 버전의 올바른 버전인지 확인할 수 있습니다.
Eclipse Juno에서 이 문제를 경험한 적이 있는데, 근본 원인은 스프링 항아리 일부가 일시적인 종속성에 의해 포함되어 있었지만 잘못된 버전에 포함되어 있었기 때문입니다.
따라서 모듈화된 프레임워크를 스프링으로 사용하여 모든 모듈(또는 적어도 가장 중요한 모듈(코어, 콩, 컨텍스트, aop, tx 등)이 동일한 버전인지 확인해야 합니다.
문제를 해결하기 위해 잘못된 버전의 일시적인 의존관계를 피하기 위해 mavenacy exclusions를 사용했습니다.
오류: "class name" 유형의 계층이 일관성 없는 오류입니다.
솔루션 : 클래스 OtherDepJar {} -->는 "other.dep.jar" 안에 있습니다.
클래스 DepJar extends OtherDepJar {} -->는 "dep.jar" 안에 있습니다.
Class Problemous Class extends DepJar {} -->는 현재 프로젝트 내에 있습니다.
dep.jar가 프로젝트의 클래스 패스에 있지만 other.dep.jar가 프로젝트의 클래스 패스에 없는 경우, 이클립스는"The hierarchy of type..."을 표시합니다.일관성이 없는 에러입니다.
저는 그 문제가 잘못된 수입 때문이라고 생각합니다.실제로 v7 지원 라이브러리를 추가한 후에는 가져오기를 업데이트해야 합니다.
프로젝트의 각 클래스에 대해 다음과 같이 수정될 수 있습니다.
- 은 모두 .
import android.[*]에서는, 「 。 - Import 재구성: 컨텍스트 메뉴에서 Source/Organized Imports 또는 (CTRL+SHIFT+O)를 선택합니다.
- 표시되면 라이브러리를 합니다.
android.support.[*]아니다)android.[*]를 참조해 주세요.
확실히 maven pom.xml에 없는 의존관계가 없어졌기 때문입니다.
예를 들어, 저는 활엽 e커머스 데모 사이트 구현을 위한 통합 테스트를 만들고 싶었습니다.
구성 파일과 기본 테스트 클래스를 재사용하기 위해 활엽 상거래의 통합 테스트와 함께 활엽 항아리를 포함했습니다.그 프로젝트에는 제가 포함하지 않은 다른 테스트 의존관계가 있어 "계층 불일치" 오류가 발생하였습니다.
bladleaf/pom.xml에서 "test dependencies"를 복사하고 bladleaf/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>
확장 클래스에 문제가 있는 경우 위의 오류 메시지가 표시됩니다.
예
class Example extends Example1 {
}
문제를 해결하다Example1
동일한 문제 마커를 가지고 @Override 주석을 실제로 첫 번째 구현 방식('슈퍼'는 오버라이드가 아닌 추상 방식)에서 제거함으로써 해결했습니다.
제 경우, 많은 클래스의 가져오기 참조에 추가 단어가 포함되어 있습니다.Import를 올바르게 하기 위해 모든 파일을 편집하여 해결했습니다.나는 수동으로 편집을 시작했다.하지만 패턴을 봤을 때, 발견으로 자동화를 했어요.일식으로 대체하다이것으로 에러가 해결되었습니다.
나는 안드로이드 API 레벨을 구글 API를 탑재한 레벨로 변경했다.
나도 이런 문제가 있었어...이 예외를 발생시킨 클래스의 계층 구조는 일식에 의해 루트 클래스로 거슬러 올라갈 수 없다는 것을 알게 되었습니다.설명:
저 같은 경우에는 A, B, C의 3개의 자바 프로젝트가 있습니다.여기서 A와 B는 maven 프로젝트이고 C는 정기적인 java eclipse 프로젝트입니다.
프로젝트 A에서는 인터페이스 "interface A"를 사용하고 있습니다.프로젝트 B에서는, 「interface A」를 확장하는 인터페이스 「interface B」를 가지고 있습니다.프로젝트 C에서는, 「interface」를 실장하는 구체적인 클래스 「class C」를 가지고 있습니다.B"
"프로젝트 C"는 빌드 경로에 "프로젝트 B"를 포함하지만 "프로젝트 A"는 포함되지 않았습니다(그것이 오류의 원인이었습니다).「C」의 빌드 패스에 「프로젝트 A」를 포함하면, 모든 것이 정상으로 돌아갔습니다.
OSGi를 사용하는 프로젝트에서 Label Provider를 확장하는 클래스가 있었는데 오류가 발생했습니다.해결책은 org.eclipse를 추가하는 것이었습니다.org.mf와 같은 단일 패키지를 Import하지 않고 manifest.mf에 있는 필수 플러그인으로 이동합니다.jface.displaces
이클립스 프로젝트를 1개만 가져올 경우.프로젝트 속성 아래의 Java 빌드 경로 설정으로 이동합니다.2 .JRE 시스템 라이브러리에 오류 기호가 첨부되어 있는 경우 두 번 클릭하여 Edit library 창 3을 엽니다.실행 환경을 시스템의 올바른 Java 버전으로 변경하거나 할당되어 있는 라디오 버튼을 체크하여 다른 설정 편집을 선택합니다.4 . [ Finish ]을 클릭합니다.
"Google Plugin for Eclipse"를 설치하지 않고 Eclipse에서 GWT 프로젝트를 가져오면 이 문제가 발생합니다.이클립스용 Google 플러그인 설치 후 이 오류가 사라집니다.
프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭하고 "Java 빌드 경로"를 선택합니다."Java 빌드 경로"에서 라이브러리를 볼 수 있습니다.이클립스는 모든 라이브러리에 오류를 표시합니다.이러한 문제를 수정하면 문제 해결에 도움이 됩니다.
내 클래스가 새로운 인터페이스를 확장한 브랜치에서 git merge를 실행한 후 이 오류가 발생했습니다.Eclipse의 Package Explorer 프레임에 있는 File-Tree를 Refresh(F5)하면 충분했습니다.
Eclipse가 모든 것을 제대로 업데이트하지 못한 것 같아서 클래스는 존재하지 않는 인터페이스를 확장했습니다.새로 고침 후 모든 오류가 사라졌습니다.
IBM에서 구입한 이클립스 산소(Eclipse Oxium)에서 IBM JDK 8을 사용하여 이클립스 Photon과 Oracle JDK 8로 전환하여 Maximo를 위한 Java 커스터마이징 작업을 진행 중입니다.
언급URL : https://stackoverflow.com/questions/8520090/eclipse-compilation-error-the-hierarchy-of-the-type-class-name-is-inconsisten
'programing' 카테고리의 다른 글
| Kotlin에서 동시에 확장 및 구현 (0) | 2023.01.04 |
|---|---|
| MySQL에서 테이블 변수 만들기 (0) | 2023.01.04 |
| Java에서 개체를 삭제하시겠습니까? (0) | 2023.01.04 |
| SQL: 두 테이블에서 세 번째 테이블과 관련된 데이터를 선택합니다. (0) | 2023.01.04 |
| Vuetify Nuxt.js : 이미지 태그에 URL 링크를 추가하는 방법 (0) | 2023.01.04 |