我下载了一些用Java编写的开源软件,并尝试使用Eclipse编译它。 在某些文件中,我收到了错误信息:“类型 '类名' 的层次结构不一致”。 这些错误是由什么原因引起的?我该如何解决?
这意味着你试图实现一个不存在的接口或继承一个不存在的类。
尝试刷新你的Eclipse。
如果仍无法解决,可能是因为你引用了一个不在构建路径中的JAR。 检查你项目的classpath并验证包含接口或类的jar文件是否在其中。
检查您的错误(选项卡“标记”)。我也遇到了以下错误:
项目中所需库的归档文件无法读取...
当修复了这个问题后,“不一致性错误”也消失了。
实际上,我已将jar添加到构建路径中,但由于某种原因它们无法被读取并出现错误
项目中所需库的归档文件无法读取或不是有效的ZIP文件
所以,我将它们作为“外部JAR”添加。这有所帮助,所有编译问题都解决了!
我还遇到过一个案例。请提供正确的项目路径,并将其导入到eclipse中。
然后转到 项目--> 清理 --> 清理所有项目。
您应该清理项目,或重新启动Eclipse。
我在将JDK升级到新版本后遇到了这个问题。我不得不更新“项目属性/Java构建路径”中的库引用。
错误: 类型"hierarchy of the type "class name" is inconsistent error"的层次结构不一致。
解决方法: class OtherDepJar {} --> 在 "other.dep.jar" 中。
class DepJar extends OtherDepJar {} --> 在 "dep.jar" 中。
class ProblematicClass extends DepJar {} --> 在当前项目中。
如果dep.jar在项目的类路径中,但是other.dep.jar不在项目的类路径中,则Eclipse会显示"The hierarchy of the type...is inconsistent error"。
如果你的类路径中有一个库文件中的某个类引用了不存在的类(可能在另一个jar文件中),那么就会出现这个错误。在这种情况下,我没有添加org.springframework.beans-3.1.2.RELEASE.jar
,并且从org.springframework.jdbc-3.1.2.RELEASE.jar
中继承了一个类org.springframework.jdbc.core.support.JdbcDaoSupport
,因此收到了这个错误。
我曾在Eclipse Juno上遇到过这个问题,根本原因是虽然一些spring jars被包含在瞬态maven依赖项中,但它们的版本不正确。
所以你应该检查是否使用了像spring这样的模块化框架,每个模块(或至少是最重要的:core、beans、context、aop、tx等)都是相同的版本。
为了解决这个问题,我使用了maven依赖性排除来避免瞬态依赖项的错误版本。