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

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.


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


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


5

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


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.



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.


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.


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.


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”


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.[*]).

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>

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


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.


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.



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


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


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


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.


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.


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.


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 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.