Eclipse错误:间接引用所需的.class文件?

我在Eclipse中出现了一个错误。这个错误信息是什么意思:

无法解析iglu.ir.TermVector类型。它是从必需的.class文件中间接引用的

512521 次浏览

它的意思是:“您使用的类需要不在类路径上的另一个类。”您应该确保(如Harry Joy所建议的)将所需的jar添加到类路径中。

这很可能是Eclipse搞混了,因为这是一个实际的错误。我忽略了这个错误,并运行了它所抱怨的endpointInterface的web服务,它运行得很好,除了每次我想要运行它时都必须处理对话框。只是另一个不透明的错误,什么也没告诉我。

当jar文件中的类不遵循与jar文件夹结构相同的结构时,就会发生此错误。

例如,如果你的类文件包含包com.test.exam,并且从这个类文件创建的classes.jar包含结构test.exam…将抛出错误。您需要纠正classes.jar的包结构,然后将其包含在eclipse构建路径中…

如果您的设置仍然没有发现任何错误,您可以尝试Project -> Clean并清理工作区中的所有项目。

编辑:抱歉,没有看到verbose_mode的建议…同样的事情

除了前面提到的类文件丢失的原因之外,此错误还可以指示存在重复的类文件,当构建路径上的类文件使用另一个在构建路径中具有多个定义的类时,eclipse将报告此错误。

我得到的错误,当我只是改变一些svn设置,而不是在代码中的任何东西。只是清理项目修复了错误。

我有时会遇到这种情况,我总是用“mvn eclipse:clean”命令来清理旧的属性,然后运行mvn eclipse:eclipse -Dwtpversion=2.0(当然对于web项目)。这里保存了一些旧的属性,所以eclipse有时会感到困惑。

在我的例子中,我创建了一个项目,并使其minSdkVersion=9targetSdkVersion=17。我使用自动生成的libs/android-support-v4.jar。我还必须使用android-support-v7-appcomapt.jar来使用ActionBarActivity。所以我只是从android-sdk/extras/andrid/support/v7/appcompat/libs文件夹中复制了android-support-v7-appcompat.jar文件,并将其粘贴到我的项目libs文件夹中。这就导致了上面的错误。 所以基本上,我需要把android-support-v4.jar文件从android-sdk/extras/andrid/support/v7/appcompat/libs以及我的项目libs文件夹。据我所知,v7.jar文件依赖于v4.jar文件。因此,它需要自己的v4.jarfile,而不是我的项目,自动创建v4.jar文件。< / p >

快速而简单地我用这种方式修复了它(我使用ADT版本:v21.0.0-531062在Windows XP家庭版)

  1. 打开清单文件。
  2. 将现有项目minSdkVersion更改为与maxSdkVersion相同的值 (建议:最好创建一个新项目,看看它的maxSdkVersion是什么)
  3. 保存清单文件。
  4. 右键单击项目并选择Build project。
  5. 从顶部菜单:项目-清洁..-只检查相关的项目,下面我选择立即开始构建和只构建选定的项目和确定。
  6. 打开java文件-没有红色错误了!
  7. 回到上面的步骤1,并将Back minSdkVersion更改为它的原始值(以支持尽可能多的Android版本)。

这很有效,但每隔几天问题就会复发。我做同样的事情,它解决了问题,让我发展。

既然你给我们的细节很少,很可能你所做的,这是一个非常容易犯的错误,而不是去

Build Path > Configure Build Path > Projects

然后从那里添加额外的项目文件夹,而不是

Build Path > Configure Build Path > Libraries

然后从那里添加你的项目文件夹。

如果你的代码是正确的,这是最肯定的情况,但通过ctrl+space快捷方式自动重新组织导入,而不是你的导入语句引用com.your。Additionalproject,你的引用都指向bin.com.your.additionalproject。

注意这个箱子。这意味着你通过将你的其他项目文件夹结构作为一个库来间接引用你的类,让你的IDE做所有的工作来查找你所引用的二进制类。

要纠正这一点,请从Libraries中删除该文件夹,并将其添加到Projects选项卡下,并重新组织导入。您的项目应该可以正常工作。

听起来这是一个已知的问题(Bug 67414),在3.0已经解决了……有人评论说他们在3.4中也会遇到这种情况。

与此同时,解决方法是从项目中删除JRE系统库,然后再将其添加回来。以下是步骤:

  • 转到带有构建错误的项目属性(右键单击>属性)

  • 查看“图书馆”;选项卡中的“构建路径”;部分

  • 查找JRE系统库;在列表中(如果缺少此选项,则此错误消息不是eclipse错误,而是配置错误的项目)

  • 删除“JRE系统库”;

  • 点击“添加库”,选择“JRE系统库”;并为项目添加适当的JRE(例如。'工作区默认JRE')

  • < p >点击“Finish"在图书馆选择和"OK",然后等待重新构建项目

希望这个错误能得到解决。

我得到这个异常,因为eclipse在不同版本的jdk中工作,只是更改为正确的,清洁和构建并工作!

当我使用一个新的eclipse版本,并试图使用以前的工作空间,我使用旧的eclipse版本,这个错误发生。

下面是我解决这个问题的方法:

右键单击我的项目在包资源管理器->属性-> Java构建路径-> Libraries ->我看到一个错误(交叉签署)在JRE系统库。因为无法找到路径。->双击JRE System Library ->选择“Workspace Default JRE”选项->完成->确定。->它在工作

仅供参考。

对我来说,当我使用已经使用了很长时间的旧jar集将jdk升级到1.8.0_60时,就会发生这种情况。如果我回到jdk1.7.0_25,所有这些问题都消失了。这似乎是JRE和库之间的兼容性问题。

我有这个错误,因为损坏的本地maven存储库

因此,为了解决这个问题,我所要做的就是在我的存储库中删除有关.jar所在的文件夹,然后在Eclipse中强制update maven

在我的例子中,这是我在pom.xml文件中添加了一个新的依赖项的结果。

新的依赖项依赖于旧版本的库(2.5)。pom.xml中的另一个库需要相同的库,但它需要3.0版本。

出于某种原因,当Maven遇到这些冲突时,它会简单地忽略最新的版本。在Eclipse中,当查看pom.xml时,你可以选择底部的“依赖层次结构”选项卡来查看依赖关系是如何解析的。在这里,您将发现是否因为这个原因而忽略了所讨论的库(以及类)。

在我的例子中,这就像锁定新版本一样简单。您可以通过右键单击该条目来做到这一点—在上下文菜单中有一个选项可以将其锁定。

我在Eclipse 4.4.2中遇到过一个有趣的案例。我的项目(P1)引用了一个外部类(项目P2),它有两个同名但参数类型不同的方法:

public static void setItem(Integer id) …
public static void setItem(Item item) …

类型Item包含在第三个项目P3中,我不想在这里看到它。P1只调用了第一个方法:

ExternalClass.setItem(Integer.valueOf(12345));

所以第二个方法,它使用了Item类,没有被使用,而且P3确实不在编译类路径中——如果它没有被使用,为什么要被使用呢?

Eclipse告诉我

The type ...Item cannot be resolved.
It is indirectly referenced from required .class files

从命令行编译不会产生任何此类问题。更改第二个方法的名称(此处未使用!)也使这个问题在Eclipse中消失了。

将Build路径中的JRE指向JDK。这对我很管用。

为我修复它的是right clicking on project > Maven > Update Project

对我来说,上面的解决方案都不起作用。 对我来说有用的是选择类中的所有代码,然后将其转换为注释, 保存,然后转换回正常文本,错误就消失了

在我的例子中,问题是“javax.ws.rs”。Webapplicationexception无法解决”;在Tomcat中启动web应用程序时执行。

添加以下库(Maven)的解决方案:

<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>

右键单击项目->属性->maven->活动maven配置文件(逗号分隔) 然后在该框中写入pom.xml并检查来自工作区项目

的解析依赖项