我已经下载了一些用Java编写的开源软件,并尝试使用Eclipse编译它。 我收到错误:“某些文件中”类名称“类型的层次结构不一致”。 导致这些错误的原因是什么?如何解决?
答案 0 :(得分:150)
这意味着您正在尝试实现不存在的接口,或者您正在扩展不存在的类。
尝试刷新Eclipse。
如果它不起作用,则可能意味着您有一个不在构建路径中的JAR的引用。 检查项目的类路径,并验证包含接口或类的jar是否在其中。
答案 1 :(得分:13)
有时会在您添加需要的jar时发生,但不包含IT所需的jar。在我的例子中添加tomcat / lib中的所有jar帮助我解决了这个问题。我正在开发一个网络应用程序。
答案 2 :(得分:11)
检查错误(标签“标记”)。我还有以下错误:
项目中所需库的存档无法读取...
当修复后,“不一致错误”消失了。
实际上我已经将jar添加到构建路径中,但由于某种原因,它们无法被错误地读取
项目中所需库的存档无法读取或不是有效的ZIP文件
所以我将它们添加为“外部罐子”。这有帮助,所有编译问题都没有了!
答案 3 :(得分:4)
我将JDK升级到新版本后出现此问题。我必须在Project Properties / Java Build Path中更新对库的引用。
答案 4 :(得分:4)
您应该清理项目,或重新启动Eclipse。
答案 5 :(得分:3)
我还有一个案例。提供正确的项目路径,并将其导入eclipse。
然后转到Project - >清洁 - >清理所有项目。
答案 6 :(得分:2)
如果您在类路径中的库文件中的某个类引用了可能位于另一个jar文件中的不存在的classe,您将看到此错误。在这里,当我没有添加org.springframework.beans-3.1.2.RELEASE.jar
并从org.springframework.jdbc.core.support.JdbcDaoSupport
扩展了一个类时,我收到了此错误,该类位于类路径的org.springframework.jdbc-3.1.2.RELEASE.jar
中。
答案 7 :(得分:2)
问题可能是你包含了不正确的罐子。我遇到了同样的问题,原因是我在项目的构建路径中包含了不正确的默认JRE库。我已经用另一个版本安装了Java,并且包含了具有不同版本的Java的JRE文件。 (我已经在我的系统中安装了JRE 1.6,并且由于之前安装的Java而在构建路径中包含了JRE库1.7)可能您可以检查构建路径中包含的JRE库是否具有正确的版本,即。您已在系统中安装的Java版本。
答案 8 :(得分:2)
我在Eclipse Juno上遇到过这个问题,根本原因是虽然一些弹簧罐被瞬态maven依赖项包含,但它们被包含在不正确的版本中。
因此,您应该检查是否使用模块化框架作为弹簧,每个模块(或至少最重要的:核心,bean,上下文,aop,tx等)都在同一版本中。
为了解决这个问题,我使用了maven依赖性排除项来避免错误版本的瞬态依赖项。
答案 9 :(得分:1)
这绝对是因为缺少我的maven pom.xml中的依赖项。
例如,我想为我的broadleaf电子商务演示网站的实现创建集成测试。
我已经包含了一个broadleaf jar,其中包含来自broadleaf commerce的集成测试,以便重用其配置文件和基本测试类。该项目有其他测试依赖项,我没有包括在内,并且我收到了"不一致的层次结构"错误。
复制"测试依赖项"来自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>
答案 10 :(得分:1)
错误:类型&#34;类名&#34;的层次结构是不一致的错误。
解决方案: class OtherDepJar {} - &gt;在&#34; other.dep.jar&#34; 。
内类 DepJar 扩展 OtherDepJar {} - &gt;在&#34; dep.jar&#34; 。
内class ProblematicClass扩展DepJar {} - &gt;在当前项目中。
如果dep.jar在项目的类路径中,但是other.dep.jar不在项目的类路径中,那么Eclipse将显示&#34;类型的层次结构......是不一致的错误&#34;
答案 11 :(得分:1)
在我的例子中,许多类中的导入引用包含一个额外的单词。我通过编辑所有文件来解决它,以获得正确的导入。我开始手动编辑。但是当我看到这个模式时,我在eclipse中使用find..replace自动化它。这解决了错误。
答案 12 :(得分:1)
如果扩展类出现问题,则会显示上述错误消息。
示例
class Example extends Example1 {
}
修复Example1
答案 13 :(得分:1)
对我来说,问题是由于错误的进口造成的。实际上,需要在添加v7支持库后更新导入。
可以通过以下方式修复,为项目的每个类:
import android.[*]
的所有行android.support.[*]
(而不是android.[*]
)。答案 14 :(得分:0)
我有一个类在使用OSGi的项目中扩展LabelProvider,出现错误。解决方案是:将org.eclipse.jface添加到manifest.mf中的所需插件,而不是导入单个包,如org.eclipse.jface.viewers
答案 15 :(得分:0)
我也遇到了这个问题......我发现抛出这个异常的类的层次结构无法通过eclipse一直追溯到它的根类...我解释:
就我而言,我有3个java项目:A,B和C ...其中A和B是maven项目,C是常规java eclipse项目......
在项目A中,我有界面&#34; interfaceA&#34; ... 在项目B中,我有界面&#34; interfaceB&#34;扩展&#34; interfaceA&#34; 在项目C中,我有具体的课程&#34; classC&#34;实现&#34; interfaceB&#34;
&#34;项目C&#34;包括&#34;项目B&#34;在其构建路径中,但不是&#34;项目A&#34; (这就是导致错误的原因)....包括&#34;项目A&#34;在&#34; C&#34;的构建路径中,一切都恢复正常......
答案 16 :(得分:0)
我有一个完全相同的问题标记并通过从一个实际上是第一个实现(&#34; super&#34;一个是抽象方法)而不是覆盖的方法中删除@Override注释来解决它。
答案 17 :(得分:0)
如果你只是导入eclipse项目 1.转到项目属性下的java构建路径设置。 2.如果JRE系统库附有错误标记,请双击它以打开“编辑库”窗口 3.将执行环境更改为正确的系统java版本,或者通过选中分配给它们的单选按钮选择编辑其他设置。 4.单击完成
答案 18 :(得分:0)
对我而言,它正在将Android API级别更改为使用Google API的级别
答案 19 :(得分:0)
在Eclipse中导入GWT项目而不安装“Google Plugin for Eclipse”时,会发生这种情况。安装“Google Plugin for Eclipse”后,此错误将消失。
答案 20 :(得分:0)
右键单击项目文件夹,然后选择“ Java Build Path”。在“ Java构建路径”下,您应该能够看到库。 Eclipse将在任何这些库中显示错误。解决这些问题将有助于解决该问题。
答案 21 :(得分:0)
在我的班级扩展了新接口的分支中进行了 git merge 后,出现了此错误。 在Eclipse的 Package Explorer 框架中刷新(F5)文件树就足够了。
看来Eclipse不能正确更新所有内容,因此这些类正在扩展尚不存在的接口。刷新后,所有错误都消失了。
答案 22 :(得分:0)
我不得不从从IBM获得并使用IBM JDK 8的Eclipse Oxygen切换到Eclipse Photon和Oracle JDK8。我正在为maximo进行Java自定义。