Błąd kompilacji Eclipse: hierarchia typu „Nazwa klasy” jest niespójna

139

Pobrałem oprogramowanie open source napisane w Javie i próbowałem skompilować je za pomocą Eclipse. Pojawił się błąd: „ Hierarchia typu„ Nazwa klasy ”jest niespójna ” w niektórych plikach. Co powoduje te błędy i jak je naprawić?

user1099579
źródło

Odpowiedzi:

161

Oznacza to, że próbujesz zaimplementować nieistniejący interfejs lub rozszerzasz nieistniejącą klasę.

Spróbuj odświeżyć swoje Eclipse.

Jeśli to nie zadziała, może to oznaczać, że masz odwołanie do pliku JAR, którego nie ma na ścieżce budowania. Sprawdź ścieżkę klas swojego projektu i upewnij się, że plik jar zawierający interfejs lub klasę się w nim znajduje.

LaGrandMere
źródło
2
Na podobnym próżno miałem zależność Mavena, która powodowała ten błąd w Spring Tool Suite, rozwiązaniem było wykonanie Maven> Download Sourcena danej zależności.
MrLore
Uznanie dla ciebie @lagrantmere
Shailesh Pratapwar
2
Sprawdź również, czy kompilacja Parenta. W moim przypadku wiedziałem, że superklasa istnieje, ale w rzeczywistości nie została poprawnie skompilowana.
Joseph Rajeev Motha
2
Miałem klasę rozszerzającą klasę abstrakcyjną, która implementowała brakujący (przemianowany z zaćmienia) interfejs
Aquarius Power
4
W moim przypadku rozszerzałem klasę, która znajdowała się w ścieżce klas (jar), ale rozszerzała trzecią klasę, która znajdowała się w innym jar, którego nie było w mojej ścieżce klas.
JustinKSU,
15

Czasami zdarza się to, gdy dodajesz słoik, którego potrzebujesz, ale nie uwzględniaj słoików, których potrzebuje. W moim przypadku dodanie wszystkich słoików w tomcat / lib pomogło mi rozwiązać ten problem. Pracuję nad aplikacją internetową.

Ibolit
źródło
Dzięki, to był mój problem. Dodałem biblioteki GWT, ale brakowało jarego API serwletów Java (w tym przypadku servlet-api-3.1.jar z Jetty).
Jamie
13

Sprawdź swoje błędy („znaczniki” na karcie). Miałem też następujący błąd:

Nie można odczytać archiwum wymaganej biblioteki w projekcie ...

a kiedy to zostało naprawione, „błąd niespójności” zniknął.

Właściwie dodałem słoiki do ścieżki kompilacji, ale z jakiegoś powodu nie można ich odczytać z błędem

Archiwum dla wymaganej biblioteki w projekcie nie może zostać odczytane lub nie jest prawidłowym plikiem ZIP

Więc zamiast tego dodałem je jako „Zewnętrzne Jars”. To pomogło i nie było już wszystkich problemów z kompilacją!

Johan Valentin
źródło
5

Miałem ten problem po uaktualnieniu JDK do nowej wersji. Musiałem zaktualizować odniesienia do bibliotek w Project Properties / Java Build Path.

jmst
źródło
4

Miałem jeszcze jeden przypadek. Podaj poprawną ścieżkę projektu i zaimportuj ją do Eclipse.

Następnie przejdź do Projekt -> Wyczyść -> Wyczyść wszystkie projekty.

Ashokchakravarthi Nagarajan
źródło
4

Należy wyczyścić projekt lub ponownie uruchomić Eclipse.

Thuy Nguyen
źródło
2

Zobaczysz ten błąd w przypadku, gdy jakaś klasa w pliku biblioteki, którą masz w ścieżce klas, zawiera odniesienie do nieistniejących klas, które mogą znajdować się w innym pliku jar. Tutaj otrzymałem ten błąd, gdy nie dodałem org.springframework.beans-3.1.2.RELEASE.jari przedłużyłem klasę z org.springframework.jdbc.core.support.JdbcDaoSupport, która była w org.springframework.jdbc-3.1.2.RELEASE.jarmojej ścieżce klas.

James Jithin
źródło
2

Problem może polegać na tym, że dołączyłeś nieprawidłowe słoiki. Miałem ten sam problem, a powodem było to, że dołączyłem niepoprawną domyślną bibliotekę JRE do ścieżki budowania projektu. Zainstalowałem Javę z inną wersją i dołączałem pliki JRE Javy z inną wersją. (Zainstalowałem JRE 1.6 w swoim systemie i miałem bibliotekę JRE 1.7 w ścieżce kompilacji ze względu na wcześniej zainstalowaną Javę) Może możesz sprawdzić, czy biblioteka JRE, którą umieściłeś w ścieżce kompilacji, ma poprawną wersję, tj. wersji Java zainstalowanej w systemie.

priti
źródło
2

Doświadczyłem tego problemu w Eclipse Juno, główną przyczyną było to, że chociaż niektóre wiosenne słoiki były dołączane przez przejściowe zależności maven, były one zawarte w nieprawidłowych wersjach.

Powinieneś więc sprawdzić, czy używasz modułowego frameworka jako sprężyny, czy każdy moduł (lub przynajmniej najważniejszy: rdzeń, fasola, kontekst, aop, tx itp.) Jest w tej samej wersji.

Aby rozwiązać problem, użyłem wykluczeń maven, aby uniknąć nieprawidłowej wersji przejściowych zależności.

Nicolas Barrera
źródło
2

Błąd: hierarchia typu „nazwa klasy” jest niespójnym błędem.

rozwiązanie: klasa OtherDepJar {} -> znajduje się wewnątrz "other.dep.jar" .

klasa DepJar rozszerza OtherDepJar {} -> znajduje się wewnątrz "dep.jar" .

klasa ProblematicClass rozszerza DepJar {} -> znajduje się wewnątrz bieżącego projektu.

Jeśli dep.jar znajduje się w ścieżce klas projektu, ale other.dep.jar nie znajduje się w ścieżce klas projektu, Eclipse wyświetli komunikat „Hierarchia typu ... jest niespójna”

vijay mp
źródło
1

Według mnie problem wynikał z niewłaściwego importu. W rzeczywistości należy zaktualizować import po dodaniu biblioteki obsługi v7.

Można to naprawić, wykonując następujące czynności dla każdej klasy projektu :

  1. Usuń wszystkie wiersze z import android.[*], w każdej klasie
  2. Zreorganizuj import: z menu kontekstowego wybierz Źródło / Organizuj importy lub (CTRL + SHIFT + O)
  3. Po wyświetleniu monitu wybierz biblioteki android.support.[*](a nie android.[*]).
Luca Fagioli
źródło
1

Z pewnością wynikało to z braku zależności, których nie było w moim maven pom.xml.

Na przykład chciałem stworzyć testy integracyjne dla mojej implementacji strony demonstracyjnej e-commerce typu broadleaf.

Dołączyłem słoik z szerokimi liśćmi z testami integracji z handlu liściastego, aby ponownie wykorzystać ich pliki konfiguracyjne i podstawowe klasy testowe. Ten projekt miał inne zależności testowe, których nie uwzględniłem i otrzymałem błąd „niespójna hierarchia”.

Po skopiowaniu „zależności testowych” z broadleaf / pom.xml i powiązanych zmiennych właściwości, które dostarczyły wersje dla każdej zależności w broadleaf / pom.xml, błąd zniknął.

Właściwości były:

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

Zależności były następujące:

<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>
Pion
źródło
1

Jeśli problem dotyczy klasy rozszerzonej, zostanie wyświetlony powyższy komunikat o błędzie.

Przykład

class Example extends Example1 {

}

napraw problemy w Example1

user3195324
źródło
1

Miałem dokładnie ten sam znacznik problemu i rozwiązałem go, usuwając adnotację @Override z metody, która w rzeczywistości była pierwszą implementacją (ta „super” jest metodą abstrakcyjną), a nie nadpisaniem.

Laurenţiu Lozan
źródło
1

W moim przypadku odniesienia importu w wielu klasach zawierały dodatkowe słowo. Rozwiązałem to, edytując wszystkie pliki, aby mieć poprawny import. Zacząłem wprowadzać zmiany ręcznie. Ale kiedy zobaczyłem wzór, zautomatyzowałem go, znajdując… zastąp w zaćmieniu. To rozwiązało błąd.

CodeMed
źródło
0

Dla mnie była to zmiana poziomu Android API na jeden z Google API

Fernando Gallego
źródło
0

Ja też miałem ten problem ... Dowiedziałem się, że hierarchii klasy, która rzucała ten wyjątek, nie można prześledzić aż do jej klasy głównej przez zaćmienie ... Wyjaśnij:

W moim przypadku mam 3 projekty java: A, B i C ... gdzie A i B to projekty maven, a C to zwykły projekt zaćmienia java ...

W projekcie A mam interfejs „interfaceA” ... W projekcie B mam interfejs „interfaceB” rozszerzający „interfaceA” W projekcie C mam konkretną klasę „classC”, która implementuje „interfaceB”

„Projekt C” zawierał „projekt B” w swojej ścieżce budowania, ale nie „projekt A” (więc to była przyczyna błędu) .... Po dołączeniu „projektu A” do ścieżki kompilacji „C” wszystko wróciło do normy ...

Carlitos Way
źródło
0

Miałem klasę, która rozszerza LabelProvider w projekcie z OSGi, tam wystąpił błąd. Rozwiązaniem było: dodanie org.eclipse.jface do wymaganych wtyczek w pliku manifest.mf zamiast importowania pojedynczych pakietów, takich jak org.eclipse.jface.viewers

Harry Siebert
źródło
0

jeśli importujesz projekt eclipse tylko 1. Przejdź do ustawienia ścieżki budowania java we właściwościach projektu. 2. W przypadku, gdy biblioteka systemu JRE ma dołączony znak błędu, kliknij go dwukrotnie, aby otworzyć okno Edytuj bibliotekę 3. Zmień środowisko wykonawcze na poprawną wersję systemu Java lub wybierz edytuj inne ustawienia, zaznaczając przyciski opcji przypisz do nich. 4. Kliknij Zakończ

mumbasa
źródło
0

Nastąpi to podczas importowania projektu GWT w Eclipse bez instalowania „Google Plugin for Eclipse”. Po zainstalowaniu „Google Plugin for Eclipse” ten błąd zniknie.

Tomek
źródło
0

Kliknij prawym przyciskiem myszy folder projektu i wybierz „Ścieżka budowania Java”. W sekcji „Ścieżka budowania Java” powinno być możliwe wyświetlenie bibliotek. Eclipse pokaże błędy w każdej z tych bibliotek. Naprawienie tego problemu pomoże rozwiązać problem.

PAN I
źródło
0

Wystąpił ten błąd po wykonaniu niektórych git merge z gałęzi, w której moje klasy rozszerzyły nowy interfejs. Wystarczyło odświeżyć (F5) drzewo plików w ramce Eksploratora pakietów w Eclipse.

Wygląda na to, że Eclipse nie zaktualizował wszystkiego poprawnie, więc klasy rozszerzały nieistniejący jeszcze interfejs. Po odświeżeniu wszystkie błędy zniknęły.

nhaggen
źródło
0

Musiałem przejść z Eclipse Oxygen, które dostałem od IBM i użyłem IBM JDK 8 na Eclipse Photon i Oracle JDK 8. Pracuję nad dostosowaniami Java dla .

Kaznodzieja
źródło