Lỗi biên dịch Eclipse: Hệ thống phân cấp của loại 'Tên lớp' không nhất quán


139

Tôi đã tải xuống một số phần mềm nguồn mở được viết bằng Java và cố gắng biên dịch nó bằng Eclipse. Tôi đã gặp lỗi: " Hệ thống phân cấp của loại 'Tên lớp' không nhất quán " trong một số tệp. Điều gì gây ra những lỗi này và làm cách nào để khắc phục chúng?

Câu trả lời:


161

Điều đó có nghĩa là bạn đang cố gắng thực hiện một giao diện không tồn tại hoặc bạn đang mở rộng một lớp không tồn tại.

Cố gắng làm mới Eclipse của bạn.

Nếu nó không hoạt động, điều đó có nghĩa là bạn có tham chiếu đến JAR không có trong đường dẫn xây dựng. Kiểm tra đường dẫn dự án của bạn và xác minh rằng bình chứa giao diện hoặc lớp nằm trong đó.


2
Cùng với sự vô ích tương tự, tôi có một phụ thuộc Maven gây ra lỗi này trong Spring Tool Suite, giải pháp là làm một Maven> Download Sourcevề sự phụ thuộc trong câu hỏi.
MrLore

thanh danh cho bạn @lagrant 4.0.3
Shailesh Pratapwar

2
Cũng kiểm tra xem Phụ huynh đang được biên dịch. Trong trường hợp của tôi, tôi biết siêu lớp tồn tại, nhưng nó không thực sự được biên dịch đúng.
Joseph Rajeev Motha

2
Tôi đã có một lớp mở rộng một lớp trừu tượng đang thực hiện giao diện bị thiếu (đổi tên thành nhật thực)
Aquarius Power

4
Trong trường hợp của tôi, tôi đã mở rộng một lớp WAS trong đường dẫn lớp (jar), nhưng nó đã mở rộng một lớp thứ ba nằm trong một jar khác không có trong đường dẫn lớp của tôi.
JustinKSU

15

Đôi khi điều đó xảy ra khi bạn thêm một bình mà BẠN cần, nhưng không bao gồm các lọ mà CNTT cần. Trong trường hợp của tôi, việc thêm tất cả các lọ trong tomcat / lib đã giúp tôi giải quyết vấn đề này. Tôi đang làm việc trên một ứng dụng web.


Cảm ơn, đây là vấn đề của tôi. Tôi đã bao gồm các lib của GWT, nhưng đã thiếu jar API của servlet Java (servlet-api-3.1.jar từ Jetty trong trường hợp này).
Jamie

13

Kiểm tra lỗi của bạn (tab "đánh dấu"). Tôi cũng có lỗi sau:

Lưu trữ cho thư viện cần thiết trong dự án không thể được đọc ...

và khi nó đã được sửa, "lỗi không nhất quán" biến mất.

Trên thực tế tôi đã thêm các tệp vào đường dẫn xây dựng, nhưng vì một số lý do, chúng không thể được đọc với lỗi

Lưu trữ cho thư viện cần thiết trong dự án không thể được đọc hoặc không phải là tệp ZIP hợp lệ

Vì vậy, thay vào đó tôi đã thêm chúng dưới dạng "Các lọ bên ngoài". Điều đó đã giúp và tất cả các vấn đề biên dịch không còn nữa!


5

Tôi đã gặp vấn đề này sau khi tôi nâng cấp JDK lên phiên bản mới. Tôi đã phải cập nhật các tham chiếu đến các thư viện trong Project Properties / Java Build Path.


4

Một trường hợp nữa tôi đã có. Đưa ra đường dẫn dự án chính xác và nhập nó vào nhật thực.

Sau đó vào Project -> Clean -> Clean tất cả các dự án.



2

Bạn sẽ thấy lỗi này trong trường hợp một lớp nào đó trong tệp thư viện của bạn trong classpath có tham chiếu đến các classe không tồn tại có thể nằm trong tệp jar khác. Ở đây, tôi đã nhận được lỗi này khi tôi không thêm org.springframework.beans-3.1.2.RELEASE.jarvà đã mở rộng một lớp từ org.springframework.jdbc.core.support.JdbcDaoSupportđó, nằm trong org.springframework.jdbc-3.1.2.RELEASE.jarđường dẫn lớp của tôi.


2

Vấn đề có thể là bạn đã bao gồm các lọ không chính xác. Tôi có cùng một vấn đề và lý do là tôi đã đưa thư viện JRE mặc định không chính xác vào đường dẫn xây dựng của dự án. Tôi đã cài đặt Java với một phiên bản khác và bao gồm các tệp JRE của Java với một phiên bản khác. (Tôi đã cài đặt JRE 1.6 trong hệ thống của mình và có thư viện JRE 1.7 được bao gồm trong đường dẫn xây dựng do Java đã cài đặt trước đó) Bạn có thể kiểm tra xem thư viện JRE mà bạn đã đưa vào đường dẫn xây dựng có đúng phiên bản không. của phiên bản Java mà bạn đã cài đặt trong hệ thống của mình.


2

Tôi đã gặp vấn đề này trên Eclipse Juno, nguyên nhân sâu xa là mặc dù một số lọ mùa xuân đã được đưa vào bởi các phụ thuộc maven thoáng qua, chúng được đưa vào các phiên bản không chính xác.

Vì vậy, bạn nên kiểm tra xem sử dụng khung được mô đun hóa như mùa xuân rằng mọi mô-đun (hoặc ít nhất là quan trọng nhất: lõi, đậu, bối cảnh, aop, tx, v.v.) đều trong cùng một phiên bản.

Để giải quyết vấn đề, tôi đã sử dụng các loại trừ phụ thuộc maven để tránh phiên bản phụ thuộc tạm thời không chính xác.


2

Lỗi: hệ thống phân cấp của loại "tên lớp" là lỗi không nhất quán.

giải pháp: class OtherDepJar {} -> nằm trong "other.dep.jar" .

lớp DepJar mở rộng OtherDepJar {} -> nằm trong "dep.jar" .

class ProblematicClass mở rộng DepJar {} -> nằm trong dự án hiện tại.

Nếu dep.jar nằm trong đường dẫn lớp của dự án, nhưng other.dep.jar không có trong đường dẫn lớp của dự án, Eclipse sẽ hiển thị "Hệ thống phân cấp của loại ... là lỗi không nhất quán"


1

Đối với tôi, vấn đề là do nhập khẩu sai. Trong thực tế, người ta cần cập nhật nhập khẩu sau khi thêm thư viện hỗ trợ v7.

Nó có thể được sửa bằng cách làm như sau, cho mỗi lớp của dự án của bạn :

  1. Xóa tất cả các dòng với import android.[*], trong mỗi lớp
  2. Sắp xếp lại nhập hàng của bạn: từ menu ngữ cảnh, chọn Nhập / Sắp xếp nhập khẩu hoặc (CTRL + SHIFT + O)
  3. Khi được nhắc, hãy chọn các thư viện android.support.[*](và không android.[*]).

1

Đó chắc chắn là do thiếu các phụ thuộc không có trong maven pom.xml của tôi.

Ví dụ: tôi muốn tạo các thử nghiệm tích hợp để triển khai trang web demo thương mại điện tử lá rộng.

Tôi đã bao gồm một bình đựng lá rộng với các bài kiểm tra tích hợp từ thương mại lá rộng để sử dụng lại các tệp cấu hình và các lớp kiểm tra cơ sở của chúng. Dự án đó có các phụ thuộc thử nghiệm khác mà tôi không bao gồm và tôi đã nhận được lỗi "phân cấp không nhất quán".

Sau khi sao chép "các phụ thuộc kiểm tra" từ broadleaf / pom.xml và các biến thuộc tính được liên kết cung cấp các phiên bản cho từng phụ thuộc trong broadleaf / pom.xml, lỗi đã biến mất.

Các thuộc tính là:

    <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>

Các phụ thuộc là:

<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

Nếu lớp mở rộng có vấn đề thì thông báo lỗi ở trên sẽ được hiển thị.

Thí dụ

class Example extends Example1 {

}

khắc phục sự cố trong Example1


1

Tôi đã có cùng một dấu hiệu vấn đề chính xác và giải quyết nó bằng cách xóa chú thích @Override khỏi một phương thức thực tế là lần thực hiện đầu tiên ("siêu" là một phương thức trừu tượng) chứ không phải ghi đè.


1

Trong trường hợp của tôi, các tham chiếu nhập trong nhiều lớp có chứa một từ thêm. Tôi đã giải quyết nó bằng cách chỉnh sửa tất cả các tệp để có bản nhập chính xác. Tôi bắt đầu thực hiện các chỉnh sửa bằng tay. Nhưng khi tôi nhìn thấy mô hình, tôi đã tự động hóa nó bằng một công cụ tìm thấy .. ở nơi nhật thực. Điều này đã giải quyết lỗi.


0

Đối với tôi, nó đã thay đổi cấp độ API Android thành một với API Google


0

Tôi cũng gặp vấn đề này ... Tôi phát hiện ra rằng hệ thống phân cấp của lớp đang ném ngoại lệ này, không thể truy nguyên tất cả các cách trở lại lớp gốc của nó bằng nhật thực ... Tôi giải thích:

Trong trường hợp của tôi, tôi có 3 dự án java: A, B và C ... trong đó A và B là các dự án maven và C là một dự án nhật thực java thông thường ...

Trong dự án A, tôi có giao diện "interfaceA" ... Trong dự án B, tôi có giao diện "interfaceB" mở rộng "interfaceA" Trong dự án C, tôi có lớp "classC" cụ thể thực hiện "interfaceB"

"Dự án C" đã bao gồm "dự án B" trong đường dẫn xây dựng của nó nhưng không bao gồm "dự án A" (vì vậy đó là nguyên nhân gây ra lỗi) .... Sau khi bao gồm "dự án A" bên trong đường dẫn xây dựng của "C" , mọi thứ trở lại bình thường ...


0

Tôi đã có một lớp mở rộng LabelProvider trong một dự án với OSGi, đã xảy ra lỗi. Giải pháp là: Thêm org.eclipse.jface vào các plugin cần thiết trong manifest.mf thay vì nhập các gói đơn lẻ như org.eclipse.jface.viewers


0

nếu bạn đang nhập dự án nhật thực chỉ 1. Đi đến cài đặt đường dẫn xây dựng java trong thuộc tính dự án. 2. Trong trường hợp thư viện JRE System có dấu hiệu lỗi, hãy nhấp đúp vào nó để mở cửa sổ Thư viện chỉnh sửa 3. Thay đổi môi trường thực thi thành phiên bản java chính xác của hệ thống hoặc chọn chỉnh sửa các cài đặt khác bằng cách chọn các nút radio gán đối với họ. 4. Nhấp vào kết thúc


0

Khi nhập dự án GWT trong Eclipse mà không cài đặt "Plugin Google cho Eclipse", điều này sẽ xảy ra. Sau khi cài đặt "Google Plugin cho Eclipse", lỗi này sẽ biến mất.


0

Nhấp chuột phải vào thư mục dự án và chọn "Đường dẫn xây dựng Java". Trong "Đường dẫn xây dựng Java", bạn sẽ có thể thấy các thư viện. Eclipse sẽ hiển thị lỗi trong bất kỳ thư viện nào. Khắc phục những vấn đề đó sẽ giúp giải quyết vấn đề.


0

Tôi đã gặp lỗi này sau khi thực hiện một số git merge từ một nhánh nơi các lớp của tôi mở rộng giao diện mới. Nó là đủ để Làm mới (F5) Cây tệp trong Trình khám phá gói khung của Eclipse.

Có vẻ như Eclipse đã không cập nhật mọi thứ một cách chính xác và vì vậy các lớp đang mở rộng một giao diện chưa tồn tại. Sau khi làm mới, tất cả các lỗi biến mất.


0

Tôi đã phải chuyển từ Oxygen Oxygen mà tôi đã nhận được từ IBM và sử dụng IBM JDK 8 sang Eclipse Photon và Oracle JDK 8. Tôi đang làm việc với các tùy chỉnh Java cho .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.