Я завантажив програмне забезпечення з відкритим кодом, написане на Java, і спробував скомпілювати його за допомогою Eclipse. Я отримав помилку: " Ієрархія типу" Ім'я класу "невідповідна " в деяких файлах. Що викликає ці помилки та як їх виправити?
Я завантажив програмне забезпечення з відкритим кодом, написане на Java, і спробував скомпілювати його за допомогою Eclipse. Я отримав помилку: " Ієрархія типу" Ім'я класу "невідповідна " в деяких файлах. Що викликає ці помилки та як їх виправити?
Відповіді:
Це означає, що ви намагаєтесь реалізувати неіснуючий інтерфейс або розширюєте неіснуючий клас.
Спробуйте оновити Eclipse.
Якщо це не працює, це може означати, що у вас є посилання на JAR, який не знаходиться в шляху збирання. Перевірте класний шлях свого проекту та переконайтеся, що в ньому знаходиться баночка, що містить інтерфейс або клас.
Іноді це трапляється, коли ви додаєте баночку, яка вам потрібна, але не включайте банки, необхідні ІТ. У моєму випадку додавання всіх баночок у tomcat / lib допомогло мені вирішити цю проблему. Я працюю над веб-додатком.
Перевірте свої помилки (вкладка «маркери»). У мене також була така помилка:
Архів необхідної бібліотеки в проекті не може бути прочитаний ...
і коли це було виправлено, "непослідовна помилка" зникла.
Насправді я додавав банки до шляху збирання, але чомусь їх не можна було прочитати помилково
Архів необхідної бібліотеки в проекті не може бути прочитаний або не є дійсним ZIP-файлом
Тому замість цього я додав їх як "Зовнішні банки". Це допомогло і всіх проблем зі збиранням більше не було!
Ще один випадок у мене був. Дайте правильний шлях проекту та імпортуйте його до затемнення.
Потім перейдіть до Проекту -> Очистити -> Очистити всі проекти.
Ви побачите цю помилку, якщо якийсь клас у вашому бібліотечному файлі, який ви маєте у classpath, має посилання на неіснуючий клас (и), який може бути в іншому файлі jar. Тут я отримав цю помилку, коли не додавorg.springframework.beans-3.1.2.RELEASE.jar і розширив клас, з org.springframework.jdbc.core.support.JdbcDaoSupportякого був org.springframework.jdbc-3.1.2.RELEASE.jarмій класний шлях.
Проблема може полягати в тому, що ви включили неправильні банки. У мене була така ж проблема, і причина полягала в тому, що я включив неправильну бібліотеку JRE за замовчуванням у шлях збирання проекту. Я встановив Java з іншою версією і включав JRE-файли Java з іншою версією. (Я встановив JRE 1.6 у своїй системі і мав бібліотеку JRE 1.7, включену в шлях збірки завдяки раніше встановленій Java). Можливо, ви можете перевірити, чи потрібна бібліотека JRE, яку ви включили в шлях збирання, правильної версії, тобто. версії Java, встановленої у вашій системі.
Я відчував цю проблему на Eclipse Juno, першопричиною було те, що хоча деякі весняні банки були включені тимчасовими залежностями Maven, вони були включені в неправильні версії.
Тож слід перевірити, чи використовується модульований фреймворк як весна, що кожен модуль (або принаймні найважливіший: ядро, боби, контекст, aop, tx тощо) є в одній версії.
Щоб вирішити проблему, я використовував виключення незалежності, щоб уникнути неправильної версії перехідних залежностей.
Помилка: ієрархія типу "ім'я класу" - це несумісна помилка.
рішення: клас OtherDepJar {} -> знаходиться всередині "other.dep.jar" .
клас DepJar розширює OtherDepJar {} -> знаходиться всередині "dep.jar" .
клас ProblematicClass розширює DepJar {} -> знаходиться у поточному проекті.
Якщо dep.jar знаходиться в класі проекту, але other.dep.jar не входить в класний шлях проекту, Eclipse покаже "Ієрархія типу ... невідповідна помилка"
Для мене це було через неправильний імпорт. Насправді потрібно оновити імпорт після додавання бібліотеки підтримки v7.
Це можна виправити, виконавши наступне, для кожного класу вашого проекту :
import android.[*], у кожному класіandroid.support.[*](а не android.[*]).Однозначно, тому що бракувало залежностей, яких не було в моєму Maven pom.xml.
Наприклад, я хотів створити інтеграційні тести для моєї реалізації демонстраційного веб-сайту широкої електронної комерції.
Я включив широколистяну банку з інтеграційними тестами з широколистової торгівлі, щоб повторно використовувати їх конфігураційні файли та базові класи тестування. Цей проект мав інші тестові залежності, які я не включав, і я отримав помилку "непослідовної ієрархії".
Після копіювання "тестових залежностей" з broadleaf / pom.xml та пов'язаних змінних властивостей, які забезпечували версії для кожної залежності в broadleaf / pom.xml, помилка усунулася.
Властивості були:
<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>
Залежності були:
<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>
Якщо розширений клас має проблему, з'явиться вищезгадане повідомлення про помилку.
Приклад
class Example extends Example1 {
}
виправити проблеми в Example1
У мене був такий самий точний маркер проблеми, і я вирішив його, видаливши анотацію @Override з методу, який насправді був першою реалізацією ("супер" - абстрактним методом), а не перевизначенням.
У моєму випадку посилання на імпорт у багатьох класах містило додаткове слово. Я вирішив це, відредагувавши всі файли для правильного імпорту. Я почав робити правки вручну. Але коли я побачив викрійку, я автоматизував її за допомогою знахідки .. замінив у затемненні. Це вирішило помилку.
Для мене це змінило рівень API Android на рівень із API API Google
У мене теж була ця проблема ... Я дізнався, що ієрархію класу, який кидає цей виняток, не можна прослідкувати повним шляхом до його кореневого класу шляхом затемнення ... Я пояснюю:
У моєму випадку у мене є 3 проекти java: A, B і C ... де A і B - це проекти Maven, а C - звичайний проект затемнення java ...
У проекті A у мене є інтерфейс "interfaceA" ... У проекті B у мене є інтерфейс "interfaceB", який розширюється "interfaceA" У проекті C у мене є конкретний клас "classC", який реалізує "interfaceB"
"Проект C" включав "проект B" у свій шлях збірки, але не "проект A" (так що це стало причиною помилки) .... Після включення "проекту A" всередину контуру збирання "C" , все повернулося до норми ...
У мене був клас, який розширює LabelProvider в проекті з OSGi, там сталася помилка. Рішення полягало в тому, що: додавання org.eclipse.jface до необхідних плагінів у маніфесті.mf замість імпортування окремих пакетів, таких як org.eclipse.jface.viewers
якщо ви імпортуєте проект затемнення лише 1. Перейдіть до налаштування шляху збірки Java під властивостями проекту. 2. Якщо у бібліотеці системи JRE приєднано знак помилки до неї двічі клацніть її, щоб відкрити вікно редагування бібліотеки. 3. Змініть середовище виконання на правильну версію системи java або виберіть редагування інших параметрів, перевіривши присвоєні радіо кнопки їм. 4. Клацніть закінчити
У мене виникла помилка після деякого злиття git з гілки, де мої класи розширили новий інтерфейс. Достатньо було оновити (F5) Дерево файлів у кадрі Провідника пакетів Eclipse.
Здається, Eclipse не оновив усе належним чином, і тому класи розширювали ще не існуючий інтерфейс. Після оновлення всі помилки зникли.
Мені довелося перейти з Eclipse Oxygen, який я отримав від IBM, і використав IBM JDK 8 на Eclipse Photon та Oracle JDK 8. Я працюю над налаштуваннями Java для maximo.
Maven>Download Sourceзалежність, про яку йдеться.