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


139

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

Answers:


161

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

尝试刷新您的Eclipse。

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


2
同样,我有一个Maven依赖关系,该依赖关系在Spring Tool Suite中导致此错误,解决方案是对所讨论的依赖关系执行Maven> Download Source
MrLore

@lagrantmere对您表示敬意
Shailesh Pratapwar 2013年

2
还要检查父级是否正在编译。就我而言,我知道超类已经存在,但实际上并没有得到正确的编译。
Joseph Rajeev Motha 2014年

2
我有一个扩展了抽象类的类,该类正在实现一个缺少的(改名为eclipse)接口
Aquarius Power

4
在我的情况下,我在类路径(一个jar)中扩展了一个WAS的类,但它扩展了不在我的类路径中的另一个jar中的第三类。
JustinKSU

15

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


谢谢,这是我的问题。我包括了GWT库,但是缺少Java servlet API jar(在这种情况下为Jetty的servlet-api-3.1.jar)。
杰米

13

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

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

修复该错误后,“不一致错误”消失了。

实际上,我已经将jar添加到了构建路径,但是由于某些原因,它们可能无法读取而出现错误

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

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


5

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


4

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

然后转到Project-> Clean-> Clean all projects。



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依赖排除来避免错误版本的临时依赖。


2

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

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

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

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

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


1

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

对于项目的每个类,可以通过以下步骤进行修复:

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

1

肯定是因为缺少了我的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>

1

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

class Example extends Example1 {

}

解决问题 Example1


1

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


1

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



0

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

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

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

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


0

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


0

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


0

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


0

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


0

从分支扩展了新接口的分支进行git合并后,出现了此错误。在Eclipse 的Package Explorer框架中刷新(F5)文件树就足够了。

看来Eclipse未能正确更新所有内容,因此这些类正在扩展尚不存在的接口。刷新后,所有错误均消失。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.