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?
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:
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.
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.
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!
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.
Projeyi temizlemeli veya Eclipse'i yeniden başlatmalısınız.
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.jar
ve bir sınıfı genişlettiğimde bu hatayı aldımorg.springframework.jdbc.core.support.JdbcDaoSupport
oldu, org.springframework.jdbc-3.1.2.RELEASE.jar
benim sınıf.
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ü.
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.
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"
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 :
import android.[*]
Her sınıftaki tüm satırları silandroid.support.[*]
(değil android.[*]
).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>
Genişletilmiş sınıf sorunu varsa, yukarıdaki hata mesajı görüntülenir.
Misal
class Example extends Example1 {
}
sorunları düzelt Example1
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ü.
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ü.
Benim için Android API seviyesini Google API'ları ile bire çeviriyordu
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ü ...
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.
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
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.
Maven
> yapmaktıDownload Source
.