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

问题描述 投票:135回答:23

我已经下载了一些用Java编写的开源软件,并尝试使用Eclipse对其进行编译。我在某些文件中收到错误:“ “类名”类型的层次结构不一致”。是什么导致这些错误,我该如何解决?

java eclipse
23个回答
153
投票

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

尝试刷新您的Eclipse。

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


1
投票

对我来说,问题是由于进口错误造成的。实际上,添加v7支持库后,需要更新导入。

可以通过以下方法进行修复,对于您的项目的每个类

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

1
投票

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

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

我已将阔叶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>

1
投票

如果扩展类存在问题,则将显示以上错误消息。

示例

class Example extends Example1 {

}

解决Example1中的问题


1
投票

我具有相同的确切问题标记,并通过从实际上是第一个实现(“超级”是抽象方法)而不是替代的方法中删除@Override注释来解决该问题。


1
投票

在我的情况下,许多类中的导入引用都包含一个额外的单词。我通过编辑所有文件以具有正确的导入来解决该问题。我开始手动进行编辑。但是,当我看到模式时,我在Eclipse中使用find..replace将其自动化。这解决了错误。


1
投票

错误:类型为“类名”的层次结构不一致错误。

解决方案:类OtherDepJar {}->在“ other.dep.jar”内部。

class DepJar扩展OtherDepJar {}->在“ dep.jar”内部。

Class ProblematicClass扩展DepJar {}->在当前项目中。

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


0
投票

对我来说,它正在将Android API级别更改为使用Google API的级别


0
投票

我也有这个问题...我发现抛出此异常的类的层次结构无法通过eclipse一直追溯到其根类...我解释:

就我而言,我有3个Java项目:A,B和C ...,其中A和B是maven项目,C是常规的Java eclipse项目...

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

“项目C”在其构建路径中包含“项目B”,但未在“项目A”中包含(因此是导致错误的原因。...在“”的构建路径中包含“项目A”之后C”,一切恢复正常...


0
投票

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


0
投票

如果您仅导入eclipse项目,1.转到项目属性下的Java构建路径设置。2.如果JRE系统库附有错误符号,请双击它以打开“编辑库”窗口3.将执行环境更改为正确的系统Java版本,或通过检查分配给它们的单选按钮来选择编辑其他设置。4.单击完成


13
投票

有时会在您添加所需的jar时发生,但不包括IT所需的jar。就我而言,将所有jar添加到tomcat / lib中可以帮助我解决此问题。我正在使用网络应用程序。


0
投票

[在Eclipse中导入GWT项目而不安装“ Google Eclipse插件”时,会发生这种情况。安装“用于Eclipse的Google插件”后,此错误将消失。


0
投票

右键单击项目文件夹,然后选择“ Java Build Path”。在“ Java构建路径”下,您应该能够看到库。 Eclipse将在任何这些库中显示错误。解决这些问题将有助于解决问题。


0
投票

我在班级扩展了新接口的分支中进行了某些git merge


0
投票
我不得不从从IBM获得并使用IBM JDK 8的Eclipse Oxygen切换到Eclipse Photon和Oracle JDK8。我正在为进行Java自定义。

11
投票

检查您的错误(标签“标记”)。我也遇到以下错误:

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

并且在解决该问题后,“不一致错误”消失了。

实际上,我已经将jar添加到了构建路径,但是由于某些原因,无法正确读取它们

无法读取项目中所需库的存档,或者该档案不是有效的ZIP文件

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


4
投票

我将JDK升级到新版本后遇到了这个问题。我必须在“项目属性/ Java构建路径”中更新对库的引用。


4
投票

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


3
投票

我还有另一种情况。提供正确的项目路径,并将其导入到Eclipse。

然后转到项目->清理->清理所有项目。


2
投票

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


2
投票

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


2
投票

我在Eclipse Juno上遇到了这个问题,根本原因是,尽管临时Maven依赖项包含了一些spring jar,但它们包含在错误的版本中。

因此,您应该检查是否使用模块化框架作为弹簧,每个模块(或至少最重要的模块:内核,Bean,上下文,aop,tx等)都处于同一版本。

为了解决该问题,我使用了Maven依赖排除来避免错误版本的临时依赖。

© www.soinside.com 2019 - 2024. All rights reserved.