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ć?
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:
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.
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ą.
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ą!
Miałem jeszcze jeden przypadek. Podaj poprawną ścieżkę projektu i zaimportuj ją do Eclipse.
Następnie przejdź do Projekt -> Wyczyść -> Wyczyść wszystkie projekty.
Należy wyczyścić projekt lub ponownie uruchomić Eclipse.
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.
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.
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.
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”
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 :
import android.[*], w każdej klasieandroid.support.[*](a nie android.[*]).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>
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
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.
Dla mnie była to zmiana poziomu Android API na jeden z Google API
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 ...
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
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
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.
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 maximo.
Maven>Download Sourcena danej zależności.