Eclipse 编译错误: “ Class name”类型的层次结构不一致

我下载了一些用 Java 编写的开源软件,并试图用 Eclipse 编译它。 我得到了错误: “ “类名”类型的层次结构不一致”在一些文件中。 是什么导致了这些错误以及如何修复它们?

262099 次浏览

这意味着您正在尝试实现一个不存在的接口,或者您正在扩展一个不存在的类。

尝试刷新您的 Eclipse。

如果它不工作,这可能意味着您有一个对不在构建路径中的 JAR 的引用。 检查项目的类路径并验证包含接口或类的 jar 是否在其中。

检查您的错误(选项卡“标记”)。我还有以下错误:

无法读取项目中所需库的存档..。

当这个问题解决后,“不一致性错误”就消失了。

实际上,我已经在构建路径中添加了 jar,但是由于某些原因,它们不能被错误地读取

无法读取项目中所需库的归档文件或归档文件不是有效的 ZIP 文件

因此,我将它们添加为“外部罐子”。这有所帮助,所有的编译问题都不复存在了!

如果类路径中的库文件中的某个类引用了可能位于另一个 jar 文件中的不存在的类,那么您将看到这个错误。在这里,我收到了这个错误,当我没有添加 org.springframework.beans-3.1.2.RELEASE.jar,并从 org.springframework.jdbc.core.support.JdbcDaoSupport扩展了一个类,这是在我的类路径的 org.springframework.jdbc-3.1.2.RELEASE.jar

有时候,当你添加一个你需要的罐子,但是不包括它所需要的罐子时,就会发生这种情况。在我的例子中,添加 tomcat/lib 中的所有罐子帮助我解决了这个问题。我正在开发一个网络应用程序。

问题可能是您包含了不正确的罐子。我也有同样的问题,原因是我在项目的构建路径中包含了不正确的默认 JRE 库。我用另一个版本安装了 Java,并且用另一个版本包含了 Java 的 JRE 文件。(我已经在我的系统中安装了 JRE 1.6,并且由于之前安装了 Java,所以在构建路径中包含了 JRE 库1.7)也许你可以检查你在构建路径中包含的 JRE 库是否是正确的版本即。你已安装在你的系统的 Java 版本。

我在 Eclipse Juno 上遇到过这个问题,其根本原因是,尽管一些 Spring jar 被临时的 maven 依赖包括在内,但它们被包含在不正确的版本中。

因此,您应该检查是否使用模块化框架作为弹簧,每个模块(或者至少是最重要的: core、 bean、 context、 aop、 tx 等)都在相同的版本中。

为了解决这个问题,我使用了 Maven 依赖性排除来避免不正确的暂时依赖性版本。

在将 JDK 升级到新版本后,我遇到了这个问题。我必须更新 ProjectProperties/JavaBuild Path 中对库的引用。

我还有一个案例。给出正确的项目路径,并将其导入到 eclipse。

然后转到 Project —— > Clean —— > Clean all Project。

对我来说,这是将 Android API 级别改为 Google API 级别

对我来说,这个问题是由于错误的进口。事实上,在添加了 v7支持库之后,需要更新导入。

它可以通过如下操作来修复,对于您的项目的每个类:

  1. import android.[*]删除每个类中的所有行
  2. 重新组织您的导入: 从上下文菜单中选择 来源/组织进口或(CTRL + SHIFT + O)
  3. 当出现提示时,选择库 android.support.[*](而不是 android.[*])。

我也有这个问题... ... 我发现抛出这个异常的类的层次结构,不能通过 eclipse 一路追溯到它的根类... ... 我解释:

在我的例子中,我有3个 java 项目: A、 B 和 C。.其中 A 和 B 是 Maven 项目 C 是一个常规的 java Eclipse 项目..。

在项目 A 中,我有接口“ interfaceA”..。 在项目 B 中,我的接口“ interfaceB”扩展了“ interfaceA” 在项目 C 中,我有一个具体的类“ classC”,它实现了“ interfaceB”

“项目 C”在其构建路径中包含了“项目 B”,但没有包含“项目 A”(这就是错误的原因) ... ..。在将“项目 A”包含在“ C”的构建路径中之后,一切恢复正常..。

这肯定是因为我的 maven pom.xml 中没有缺少依赖项。

例如,我想为我的宽叶电子商务演示站点的实现创建集成测试。

为了重用它们的配置文件和基本测试类,我已经包含了一个阔叶 jar,其中包含了来自阔叶商业的集成测试。该项目还有其他测试依赖项,我没有包括在内,我收到了“不一致的层次结构”错误。

将“测试依赖项”从 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>

在一个使用 OSGi 的项目中,我有一个扩展 LabelProvider 的类,在那里发生了错误。解决方案是: 在 Manif.mf 中将 org.eclipse.jface 添加到所需的插件中,而不是导入像 org.eclipse.jface.viewers 这样的单个包

如果扩展类有问题,那么将显示上面的错误消息。

例子

class Example extends Example1 {


}

解决 Example1中的问题

您应该清理项目,或者重新启动 Eclipse。

我有一个完全相同的问题标记,并通过从实际上是第一个实现(“ super”是一个抽象方法)而不是重写的方法中删除@Override 注释来解决这个问题。

在我的例子中,许多类中的导入引用都包含一个额外的单词。我通过编辑所有文件以获得正确的导入来解决这个问题。我开始手动编辑。但是当我看到这个模式时,我用一个发现自动化了它。.在日食中替换。这解决了错误。

如果您只是导入 Eclipse 项目 1. 转到项目属性下的 java 构建路径设置。 2.如果 JRE 系统库有一个错误标志附加到它双击它打开编辑库窗口 3.将执行环境更改为系统的正确 Java 版本,或者通过检查分配给它们的单选按钮来选择编辑其他设置。 点击完成

错误: “ class name”类型的层次结构是不一致的错误。

解决方案: 类 其他 DepJar{}—— > 在 “ other. dep.jar”中。

德加扩展 其他 DepJar{}—— > 在 Dep.jar内部。

类问题类扩展 DepJar {}—— > 在当前项目中。

如果 dep.jar 在项目的类路径中,而 other. dep.jar 不在项目的类路径中,Eclipse 将显示“类型的层次结构... 是不一致的错误”

当在 Eclipse 中导入 GWT 项目而不安装“ GooglePluginforEclipse”时,就会发生这种情况。安装“ GooglePluginforEclipse”后,此错误将消失。

右键单击项目文件夹并选择“ JavaBuildPath”。在“ JavaBuildPath”下,您应该能够看到库。Eclipse 将在这些库中显示错误。解决这些问题将有助于解决这个问题。

在我的类扩展了一个新接口的分支中执行了一些 Git 合并操作之后,我出现了这个错误。 在 Eclipse 的 软件包浏览器帧中使用文件树 刷新(F5)就足够了。

Eclipse 似乎没有正确地更新所有内容,因此这些类正在扩展一个尚未存在的接口。刷新后,所有错误消失。

我不得不从我从 IBM 得到的 Eclipse ox 转向使用 IBM JDK 8到 Eclipse Photon 和 Oracle JDK 8。我正在为 进行 Java 定制。