Kesalahan kompilasi Eclipse: Hirarki tipe 'Nama kelas' tidak konsisten

139

Saya telah mengunduh beberapa perangkat lunak sumber terbuka yang ditulis dalam Java dan mencoba mengompilasinya menggunakan Eclipse. Saya mendapat kesalahan: " Hirarki tipe 'Nama kelas' tidak konsisten " dalam beberapa file. Apa yang menyebabkan kesalahan ini dan bagaimana cara memperbaikinya?

pengguna1099579
sumber

Jawaban:

161

Ini berarti Anda mencoba mengimplementasikan antarmuka yang tidak ada atau Anda memperluas kelas yang tidak ada.

Coba segarkan Eclipse Anda.

Jika tidak berhasil, itu mungkin berarti Anda memiliki referensi ke JAR yang tidak ada di jalur build. Periksa classpath proyek Anda dan verifikasi bahwa tabung berisi antarmuka atau kelas ada di dalamnya.

LaGrandMere
sumber
2
Sepanjang sia-sia serupa, saya memiliki ketergantungan Maven yang menyebabkan kesalahan ini di Spring Tool Suite, solusinya adalah melakukan Maven> Download Sourcepada ketergantungan yang dipertanyakan.
MrLore
kudos to you @lagrantmere
Shailesh Pratapwar
2
Periksa juga apakah Induk sedang dikompilasi. Dalam kasus saya, saya tahu ada superclass, tapi sebenarnya tidak bisa dikompilasi dengan benar.
Joseph Rajeev Motha
2
Saya memiliki kelas yang memperluas kelas abstrak yang mengimplementasikan antarmuka yang hilang (dinamai ulang dari gerhana)
Aquarius Power
4
Dalam kasus saya, saya memperluas kelas yang berada di jalur kelas (toples), tetapi memperpanjang kelas ketiga yang berada di toples berbeda yang tidak ada di jalur kelas saya.
JustinKSU
15

Kadang-kadang itu terjadi ketika Anda menambahkan stoples yang ANDA butuhkan, tetapi tidak termasuk toples yang dibutuhkan IT. Dalam kasus saya menambahkan semua stoples di kucing jantan / lib membantu saya untuk memecahkan masalah ini. Saya sedang mengerjakan aplikasi web.

Ibolit
sumber
Terima kasih, ini masalah saya. Saya menyertakan lib GWT, tetapi tidak memiliki toples Java servlet API (servlet-api-3.1.jar dari Jetty dalam kasus ini).
Jamie
13

Periksa kesalahan Anda (tab "spidol"). Saya juga memiliki kesalahan berikut:

Arsip untuk perpustakaan yang diperlukan dalam proyek tidak dapat dibaca ...

dan ketika itu diperbaiki "kesalahan tidak konsisten" menghilang.

Sebenarnya saya telah menambahkan toples ke jalur build, tetapi untuk beberapa alasan mereka tidak bisa dibaca dengan kesalahan

Arsip untuk perpustakaan yang diperlukan dalam proyek tidak dapat dibaca atau bukan file ZIP yang valid

Jadi alih-alih saya menambahkannya sebagai "Guci Eksternal". Itu membantu dan semua masalah kompilasi tidak ada lagi!

Johan Valentin
sumber
5

Saya memiliki masalah ini setelah saya memutakhirkan JDK ke versi baru. Saya harus memperbarui referensi ke perpustakaan di Project Properties / Java Build Path.

jmst
sumber
4

Satu lagi kasus yang saya miliki. Berikan jalur proyek yang benar, dan impor ke gerhana.

Lalu pergi ke Project -> Clean -> Clean all project.

Ashokchakravarthi Nagarajan
sumber
4

Anda harus membersihkan proyek, atau memulai ulang Eclipse.

Thuy Nguyen
sumber
2

Anda akan melihat kesalahan ini jika beberapa kelas dalam file perpustakaan Anda yang Anda miliki di classpath merujuk ke kelas yang tidak ada yang bisa berada di file jar lain. Di sini, saya menerima kesalahan ini ketika saya tidak menambahkan org.springframework.beans-3.1.2.RELEASE.jardan telah memperpanjang kelas dari org.springframework.jdbc.core.support.JdbcDaoSupport, yang berada di jalan kelas org.springframework.jdbc-3.1.2.RELEASE.jarsaya.

James Jithin
sumber
2

Masalahnya mungkin Anda memasukkan botol yang salah. Saya memiliki masalah yang sama dan alasannya adalah karena saya telah memasukkan pustaka JRE default yang salah dalam jalur pembangunan proyek. Saya telah menginstal Java dengan versi lain dan termasuk file JRE Java dengan versi yang berbeda. (Saya telah menginstal JRE 1.6 di sistem saya dan memiliki pustaka JRE 1.7 termasuk dalam path build karena Java yang diinstal sebelumnya) Mungkin Anda dapat memeriksa apakah pustaka JRE yang telah Anda sertakan dalam path build adalah versi yang benar yaitu. versi Java yang telah Anda instal di sistem Anda.

priti
sumber
2

Saya pernah mengalami masalah ini di Eclipse Juno, penyebab utamanya adalah bahwa meskipun beberapa toples musim semi dimasukkan oleh dependensi pakar sementara, mereka termasuk dalam versi yang salah.

Jadi Anda harus memeriksa apakah menggunakan kerangka kerja termodulasi sebagai pegas bahwa setiap modul (atau setidaknya yang paling penting: inti, kacang, konteks, aop, tx, dll) berada di versi yang sama.

Untuk mengatasi masalah, saya telah menggunakan pengecualian maven dependnecy untuk menghindari versi dependensi sementara yang salah.

Nicolas Barrera
sumber
2

Kesalahan: hierarki jenis "nama kelas" adalah kesalahan yang tidak konsisten.

solusi: class OtherDepJar {} -> ada di dalam "other.dep.jar" .

kelas DepJar meluas OtherDepJar {} -> ada di dalam "dep.jar" .

class ProblematicClass extends DepJar {} -> ada di dalam proyek saat ini.

Jika dep.jar berada di classpath proyek, tetapi other.dep.jar tidak ada di classpath proyek, Eclipse akan menunjukkan "Hirarki tipe ... adalah kesalahan yang tidak konsisten"

vijay mp
sumber
1

Bagi saya, masalah ini disebabkan oleh impor yang salah. Bahkan, orang perlu memperbarui impor setelah menambahkan perpustakaan dukungan v7.

Itu dapat diperbaiki dengan melakukan sebagai berikut, untuk setiap kelas proyek Anda :

  1. Hapus semua baris dengan import android.[*], di setiap kelas
  2. Atur kembali impor Anda: dari menu konteks pilih Sumber / Atur Impor atau (CTRL + SHIFT + O)
  3. Saat diminta, pilih perpustakaan android.support.[*](dan bukan android.[*]).
Luca Fagioli
sumber
1

Itu pasti karena dependensi yang hilang yang tidak ada di maven pom.xml saya.

Sebagai contoh, saya ingin membuat tes integrasi untuk implementasi saya dari situs demo e-commerce berdaun lebar.

Saya telah memasukkan jar berdaun lebar dengan tes integrasi dari perdagangan berdaun lebar untuk menggunakan kembali file konfigurasi dan kelas pengujian dasar. Proyek itu memiliki dependensi pengujian lain yang belum saya sertakan dan saya menerima kesalahan "hierarki tidak konsisten".

Setelah menyalin "dependensi pengujian" dari broadleaf / pom.xml dan variabel properti terkait yang menyediakan versi untuk setiap dependensi di broadleaf / pom.xml, kesalahan hilang.

Properti itu:

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

Ketergantungan itu:

<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>
Bob
sumber
1

Jika kelas yang diperluas memiliki masalah maka pesan kesalahan di atas akan ditampilkan.

Contoh

class Example extends Example1 {

}

perbaiki masalah di Example1

pengguna3195324
sumber
1

Saya memiliki penanda masalah yang sama persis dan menyelesaikannya dengan menghapus penjelasan @Override dari metode yang sebenarnya implementasi pertama ("super" yang menjadi metode abstrak) dan bukan override.

Laurenţiu Lozan
sumber
1

Dalam kasus saya, referensi impor di banyak kelas berisi kata tambahan. Saya menyelesaikannya dengan mengedit semua file untuk mendapatkan impor yang benar. Saya mulai mengedit secara manual. Tetapi ketika saya melihat polanya, saya mengotomatiskannya dengan find..replace in eclipse. Ini menyelesaikan kesalahan.

CodeMed
sumber
0

Bagi saya itu mengubah level Android API menjadi satu dengan Google API

Fernando Gallego
sumber
0

Saya juga mengalami masalah ini ... Saya menemukan bahwa hierarki kelas yang melempar pengecualian ini, tidak dapat dilacak sepanjang jalan kembali ke kelas akarnya oleh gerhana ... Saya Jelaskan:

Dalam kasus saya, saya memiliki 3 proyek java: A, B dan C ... di mana A dan B adalah proyek pakar dan C proyek java eclipse biasa ...

Dalam proyek A, saya memiliki antarmuka "interfaceA" ... Dalam proyek B, saya memiliki antarmuka "interfaceB" yang meluas "interfaceA" Dalam proyek C, saya memiliki kelas konkret "classC" yang mengimplementasikan "interfaceB"

"Project C" termasuk "project B" di path build-nya tetapi bukan "project A" (jadi itulah penyebab error) .... Setelah memasukkan "project A" di dalam path build "C" , semuanya kembali normal ...

Carlitos Way
sumber
0

Saya punya kelas yang memperluas LabelProvider dalam proyek dengan OSGi, ada kesalahan terjadi. Solusinya adalah: Menambahkan org.eclipse.jface ke plugin yang diperlukan di manifest.mf alih-alih mengimpor paket tunggal seperti org.eclipse.jface.viewers

Harry Siebert
sumber
0

jika Anda mengimpor proyek gerhana hanya 1. Pergi ke pengaturan jalur pembuatan java di bawah properti proyek. 2. Jika pustaka Sistem JRE memiliki tanda kesalahan lampirkan padanya klik dua kali untuk membuka jendela Edit pustaka 3. Ubah lingkungan eksekusi ke versi java yang benar dari sistem atau pilih edit pengaturan lain dengan memeriksa tombol radio yang ditetapkan ke mereka. 4. Klik selesai

mumbasa
sumber
0

Saat mengimpor proyek GWT di Eclipse tanpa menginstal "Google Plugin untuk Eclipse", ini akan terjadi. Setelah memasang "Google Plugin untuk Eclipse", kesalahan ini akan hilang.

Tom
sumber
0

Klik kanan pada folder proyek dan pilih "Java Build Path". Di bawah "Java Build Path" Anda harus dapat melihat perpustakaan. Eclipse akan menampilkan kesalahan di salah satu perpustakaan itu. Memperbaiki masalah tersebut akan membantu menyelesaikan masalah tersebut.

TUAN DAN
sumber
0

Saya mengalami kesalahan ini setelah melakukan git merge dari cabang tempat kelas saya memperluas antarmuka baru. Itu sudah cukup untuk Refresh (F5) Pohon-File dalam bingkai Package Explorer dari Eclipse.

Tampaknya Eclipse tidak memperbarui semuanya dengan benar sehingga kelas memperluas antarmuka yang belum ada. Setelah refresh, semua kesalahan hilang.

nhaggen
sumber
0

Saya harus beralih dari Eclipse Oxygen yang saya dapatkan dari IBM dan menggunakan IBM JDK 8 ke Eclipse Photon dan Oracle JDK 8. Saya sedang mengerjakan kustomisasi Java untuk .

Pengkhotbah
sumber