Eclipse derleme hatası: 'Class name' türünün hiyerarşisi tutarsız


139

Java ile yazılmış bazı açık kaynaklı yazılımlar indirdim ve Eclipse kullanarak derlemeye çalıştım. Şu hatayı aldım: Bazı dosyalarda " Sınıf adı" türünün hiyerarşisi tutarsız ". Bu hatalara ne neden olur ve bunları nasıl düzeltirim?

Yanıtlar:


161

Bu, var olmayan bir arabirimi uygulamaya çalıştığınız veya var olmayan bir sınıfı genişlettiğiniz anlamına gelir.

Eclipse'inizi yenilemeye çalışın.

Bu işe yaramazsa, derleme yolunda olmayan bir JAR'a başvurunuz olduğu anlamına gelebilir. Projenizin sınıfyolunu kontrol edin ve arabirimi veya sınıfı içeren kavanozun içinde olduğunu doğrulayın.


2
Benzer şekilde, Spring Tool Suite'ta bu hataya neden olan bir Maven bağımlılığım vardı, çözüm söz konusu bağımlılığa bir Maven> yapmaktı Download Source.
MrLore

shaudh to you @lagrantmere
Shailesh Pratapwar

2
Ayrıca Ebeveynin derlendiğini kontrol edin. Benim durumumda üst sınıfın var olduğunu biliyordum, ama aslında düzgün bir şekilde derlenmiyordu.
Joseph Rajeev Motha

2
Eksik (tutulma olarak yeniden adlandırılmış) bir arabirimi uygulayan soyut bir sınıfı genişleten bir sınıfım vardı
Kova Gücü

4
Benim durumumda, sınıf yolunda (kavanoz) WAS olan bir sınıfı genişletiyordum, ancak sınıf yolumda olmayan farklı bir kavanozda üçüncü bir sınıfı genişletiyordum.
JustinKSU

15

Bazen ihtiyacınız olan bir kavanoz eklediğinizde olur, ancak BT'nin ihtiyacı olan kavanozları içermez. Benim durumumda tomcat / lib'deki tüm kavanozları eklemek bu sorunu çözmeme yardımcı oldu. Bir web uygulaması üzerinde çalışıyorum.


Teşekkürler, bu benim sorunumdu. GWT kütüphanelerini dahil ettim, ancak Java sunucu uygulaması API kavanozunu (bu durumda Jetty'den servlet-api-3.1.jar) yoktu.
Jamie

13

Hatalarınızı kontrol edin ("işaretçiler" sekmesi). Ayrıca aşağıdaki hatayla karşılaştım:

Projede gerekli kütüphane arşivi okunamıyor ...

ve bu düzeltildiğinde "tutarsız hata" ortadan kayboldu.

Aslında inşaat yoluna kavanozlar ekledim, ama nedense hata ile okunamadılar

Projede gerekli kütüphane arşivi okunamıyor veya geçerli bir ZIP dosyası değil

Bunun yerine onları "Dış Kavanozlar" olarak ekledim. Bu yardımcı oldu ve tüm derleme sorunları artık yoktu!


5

JDK'yı yeni bir sürüme yükselttikten sonra bu sorunla karşılaştım. Proje Özellikleri / Java Derleme Yolu kitaplıkları başvuruları güncelleştirmek zorunda kaldı.


4

Bir vaka daha yaşadım. Doğru proje yolunu verin ve tutulması için içe aktarın.

Ardından Proje -> Temizle -> Tüm projeleri temizle'ye gidin.



2

Sınıf yolunuzdaki bir kütüphane sınıfının başka bir kavanoz dosyasında bulunmayan mevcut olmayan sınıflara başvurması durumunda bu hatayı görürsünüz. Burada, ekleme yapmadığım org.springframework.beans-3.1.2.RELEASE.jarve bir sınıfı genişlettiğimde bu hatayı aldımorg.springframework.jdbc.core.support.JdbcDaoSupport oldu, org.springframework.jdbc-3.1.2.RELEASE.jarbenim sınıf.


2

Sorun yanlış kavanozlar eklemiş olabilirsiniz. Aynı sorunu vardı ve nedeni, projenin oluşturma yoluna yanlış varsayılan JRE kitaplığı dahil olmuştu. Java'yı başka bir sürümle yükledim ve Java'nın JRE dosyalarını farklı bir sürümle ekledim. (Sistemime JRE 1.6 yükledim ve önceden yüklenmiş Java nedeniyle derleme yoluna JRE kütüphanesi 1.7 dahil ediyordum) Derleme yoluna eklediğiniz JRE kütüphanesinin doğru sürümünün olup olmadığını kontrol edebilirsiniz. sisteminize yüklediğiniz Java sürümü.


2

Eclipse Juno'da bu problemi yaşadım, kök neden, bazı bahar kavanozlarının geçici maven bağımlılıkları tarafından dahil edilmesine rağmen, yanlış versiyonlara dahil edilmesiydi.

Bu nedenle, her modülün (veya en azından en önemlisi: çekirdek, fasulye, bağlam, aop, tx, vb.) Aynı sürümde olup olmadığını modülerleştirilmiş bir çerçeve kullanarak yay olarak kontrol etmelisiniz.

Sorunu çözmek için geçici bağımlılıkların yanlış versiyonunu önlemek için maven bağımlılığı istisnaları kullandım.


2

Hata: "sınıf adı" türündeki hiyerarşi tutarsız bir hatadır.

çözüm: class OtherDepJar {} -> "other.dep.jar" içinde .

sınıf DepJar uzanır OtherDepJar > içindedir - {} "dep.jar" .

sınıf ProblematicClass genişletiyor DepJar {} -> mevcut proje içinde.

Dep.jar projenin sınıfyolundaysa, ancak other.dep.jar projenin sınıfyolunda değilse, Eclipse "Tür hiyerarşisi tutarsız bir hatadır"


1

Benim için sorun yanlış ithalattan kaynaklanıyordu. Aslında, v7 destek kitaplığını ekledikten sonra içe aktarmaları güncellemek gerekir.

Projenizin her sınıfı için aşağıdaki şekilde düzeltilebilir :

  1. import android.[*]Her sınıftaki tüm satırları sil
  2. İçe aktarma işlemlerinizi yeniden düzenleyin: içerik menüsünden İçe Aktarmayı Kaynakla / Düzenle'yi seçin veya (CTRL + ÜST KRKT + O)
  3. İstendiğinde kütüphaneleri seçin android.support.[*](değil android.[*]).

1

Kesinlikle benim maven pom.xml olmayan eksik bağımlılıklar oldu.

Örneğin, geniş yapraklı e-ticaret demo sitesini uygulamam için entegrasyon testleri oluşturmak istedim.

Yapılandırma dosyalarını ve temel test sınıflarını yeniden kullanmak için geniş yapraklı ticaretten entegrasyon testlerine sahip geniş yapraklı bir kavanoz ekledim. Bu projede dahil etmediğim başka test bağımlılıkları vardı ve "tutarsız hiyerarşi" hatası aldım.

Broadleaf / pom.xml dosyasındaki "test bağımlılıkları" ve broadleaf / pom.xml dosyasındaki her bağımlılık için sürümler sağlayan ilişkili özellikler değişkenleri kopyalandıktan sonra hata ortadan kalktı.

Özellikleri:

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

Bağımlılıklar şunlardı:

<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

Genişletilmiş sınıf sorunu varsa, yukarıdaki hata mesajı görüntülenir.

Misal

class Example extends Example1 {

}

sorunları düzelt Example1


1

Ben aynı sorun işareti vardı ve @Override ek açıklama aslında bir uygulama ("süper" bir soyut bir yöntem olan) ve geçersiz kılma bir yöntemden kaldırarak çözüldü.


1

Benim durumumda, sınıfların çoğundaki ithalat referansları fazladan bir kelime içeriyordu. Doğru dosyaları almak için tüm dosyaları düzenleyerek çözdüm. Düzenlemeleri elle yapmaya başladım. Ama kalıbı gördüğümde, tutulmasıyla bir bul ... değiştirme ile otomatikleştirdim. Bu hatayı çözdü.



0

Ben de bu sorunu yaşıyordum ... Bu istisnayı fırlatan sınıf hiyerarşisinin, tutulma ile kök sınıfına kadar izlenemediğini öğrendim ... Açıkladım:

Benim durumumda 3 java projem var: A, B ve C ... burada A ve B maven projeleri ve C düzenli bir java tutulma projesi ...

A projesinde, ben "InterfaceA" arayüzü var ... B projesinde, ben "interfaceA" genişleten "arayüzB" arayüzü var C projesinde, ben "interfaceB" uygulayan beton sınıfı "classC" var

"Proje C" derleme yoluna "proje B" yi dahil ediyordu, "proje A" yı içermiyordu (hatanın nedeni buydu) .... "Proje A" yı "C" inşa yoluna ekledikten sonra , her şey normale döndü ...


0

OSGi ile bir projede LabelProvider genişleten bir sınıf vardı, orada hata oluştu. Çözüm şuydu: org.eclipse.jface.viewers gibi tek paketleri içe aktarmak yerine manifest.mf dosyasında gerekli eklentilere org.eclipse.jface eklemek.


0

eclipse projesini sadece içe aktarıyorsanız 1. Proje özelliklerinin altındaki java oluşturma yolu ayarına gidin. 2. JRE Sistem kitaplığında hata işareti varsa Kitaplığı düzenle penceresini açmak için üzerine çift tıklayın 3. Yürütme ortamını sistemin doğru java sürümüne değiştirin veya atanan radyo düğmelerini kontrol ederek diğer ayarları düzenlemeyi seçin. onlara. 4. Son'u tıklayın


0

"Eclipse için Google Eklentisi" ni yüklemeden Eclipse'de bir GWT projesi içe aktarırken bu gerçekleşir. "Eclipse için Google Eklentisi" yüklendikten sonra bu hata kaybolacaktır.


0

Proje klasörünü sağ tıklayın ve "Java Derleme Yolu" nu seçin. "Java Derleme Yolu" altında kütüphaneleri görebilmeniz gerekir. Eclipse, bu kütüphanelerin herhangi birinde hatalar gösterecektir. Bu sorunu düzeltmek sorunun çözülmesine yardımcı olacaktır.


0

Sınıflarım yeni bir arabirim genişletilmiş bir şubesinden bazı git birleştirme yaptıktan sonra bu hata vardı . Eclipse'in Paket Gezgini çerçevesinde Dosya Ağacını Yenilemek (F5) yeterliydi .

Eclipse her şeyi düzgün güncellememiş gibi görünüyor ve bu yüzden sınıflar henüz mevcut olmayan bir arayüzü genişletiyordu. Yenilemeden sonra tüm hatalar kayboldu.


0

IBM'den aldığım ve IBM JDK 8'i kullandığım Eclipse Oxygen'ten Eclipse Photon ve Oracle JDK 8'e geçmek zorunda kaldım. .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.