【问题标题】:Eclipse error: indirectly referenced from required .class files?Eclipse 错误:从所需的 .class 文件间接引用?
【发布时间】:2022-04-05 02:44:52
【问题描述】:

我在 Eclipse 中遇到错误。这个错误信息是什么意思:

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

【问题讨论】:

  • 在项目的源路径中添加包含 iglu.ir.TermVector 的 jar。
  • 如果您确定已提供该课程,请尝试对所有项目进行清理和刷新
  • 这发生在我身上,因为我的 jar 中的传递依赖项
  • 没错!这个 jar 需要存在于 pom.xml 依赖项中。
  • 我通过在java项目中添加一些jar文件解决了。

标签: eclipse intellij-idea


【解决方案1】:

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

【讨论】:

  • 通用而简单的答案,在不同的情况下对我有很大帮助:) THX
  • 在您特别尝试删除类时,请检查父类以获取对缺失类型的引用。如果这并不总是该消息的含义,那么它可能是大多数时间的含义。
  • 是的,我发现这是由于引用的 jars 中缺少一些 jars :) 谢谢。
  • @Arne,为什么会说间接引用呢?它不应该说它根本没有被引用吗?
  • @Pacerier 这不是真的。直接引用此类型的不是您的代码,而是您的代码使用的东西,因此从您的代码到该类型的依赖是“仅”传递的,但它就在那里。 “间接”告诉你去哪里看。
【解决方案2】:

这很可能是 Eclipse 感到困惑的问题,因为它是一个实际错误。我忽略了这个错误并运行了它所抱怨的端点接口的 Web 服务,它运行良好,除了每次我想运行它时都必须处理对话框。只是另一个不透明的错误,什么也没告诉我。

【讨论】:

  • 它也不在罐子里。它位于所有相关项目中包含的项目之一中。
  • 我在 eclipse 中遇到过这个问题,但是通过 maven 构建工作正常。修复方法是删除并重新导入包含所需类的 Eclipse 工作区中的项目。
  • 有时可能会发生这种情况,但我遇到了给出相同响应的错误,并且项目无法构建。
【解决方案3】:

它有时会发生在我身上,我总是使用“mvn eclipse:clean”命令来清理旧属性,然后运行 ​​mvn eclipse:eclipse -Dwtpversion=2.0(当然对于 web 项目)。保存了一些旧属性,所以 eclipse 有时会感到困惑。

【讨论】:

  • 我清理了项目(从 Project->Clean...),它工作正常。
  • mvn eclipse:clean 和/或 mvn eclipse:eclipse 似乎是让它发挥作用的魔术。
  • 这也帮助我在 Intellij IDEA 中使用 Maven。
  • 请注意,Maven clean 阶段处于其自己的 clean Maven Lifecycle - 这与 default 生命周期不同,后者可能还有其他阶段更频繁地运行(例如:testinstall,不要提前运行 clean,因为 clean 不在它们的默认生命周期中)。
  • 我遇到了类似的问题,但与 IntelliJ 无关。 mvn eclipse:clean 最初使问题变得更糟。为了修复它,我从 eclipse 中删除了项目(不要删除源文件),然后使用 import/maven 重新导入项目。
【解决方案4】:

由于本地 maven 存储库损坏,我遇到了这个错误。

所以,为了解决这个问题,我所要做的就是进入我的存储库并删除相关 .jar 所在的文件夹,然后在 Eclipse 中强制使用 update maven

【讨论】:

  • 这对我有用,而以上都没有。当我的一位队友从 pom 更新存储库的版本时,出现了问题。
【解决方案5】:

听起来这是一个在 3.0 中解决的已知问题(错误 67414)......有人评论说在 3.4 中也发生了这种情况。

与此同时,解决方法是从项目中删除 JRE 系统库,然后重新添加。

Here are the steps:

转到出现构建错误的项目属性(右键单击>属性)

查看“构建路径”部分中的“库”标签

在列表中找到“JRE System Library”(如果缺少,则此错误消息不是 Eclipse 错误,而是错误配置的项目)

删除“JRE 系统库”

点击“Add Library ...”,选择“JRE System Library”并为项目添加适当的JRE(例如'Workspace default JRE')

在库选择中点击“完成”,在项目属性中点击“确定”,然后等待重新构建项目

希望错误能得到解决...

【讨论】:

  • 是的。我在 spring-web-3.0.1.RELEASE 中遇到了同样的问题。虽然它在 pom.xml 中注册为依赖项,并且已经在某些引用中作为依赖项工作,但当我做了一个 http.csrf().disable().cors().disable().httpBasic().and().authorizeRequests() .antMatchers(PUBLIC_MATCHERS).permitAll().anyRequest().authenticated();它坏了。然后我下载了jar文件并以传统的手动方式导入。
【解决方案6】:

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

例如如果您的类文件具有包 com.test.exam 并且从该类文件创建的 classes.jar 具有结构 test.exam... 将引发错误。您需要更正 classes.jar 的包结构,然后将其包含在 ecplipse 构建路径中...

【讨论】:

    【解决方案7】:

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

    【讨论】:

      【解决方案8】:

      我有一个关于 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 中消失了。

      【讨论】:

      • 我在使用 Eclipse Photon Release (4.8.0) 时遇到了完全相同的问题
      【解决方案9】:

      如果你仍然找不到你的设置有什么问题,你可以试试 Project -> Clean and clean all the projects in the workspace.

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

      【讨论】:

        【解决方案10】:

        为我解决的问题是right clicking on project > Maven > Update Project

        【讨论】:

          【解决方案11】:

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

          【讨论】:

            【解决方案12】:

            当我只是更改一些 svn 设置而不是代码中的任何内容时,我得到了错误。只需清理项目即可修复错误。

            【讨论】:

              【解决方案13】:

              就我而言,我创建了一个项目并创建了它的minSdkVersion=9targetSdkVersion=17。我使用了自动生成的libs/android-support-v4.jar。我还必须使用ActionBarActivity 使用android-support-v7-appcomapt.jar。所以我只是从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 文件。

              【讨论】:

                【解决方案14】:

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

                1. 已打开清单文件。
                2. 将现有项目 minSdkVersion 更改为与 maxSdkVersion 相同的值 (建议:最好创建一个新项目,看看它的 maxSdkVersion 是多少)
                3. 保存清单文件。
                4. 右键单击项目并选择构建项目。
                5. 从顶部菜单:项目 - 清理.. - 选中仅相关项目,下面我选中立即开始构建并仅构建选定的项目并确定。
                6. 打开 java 文件 - 不再出现红色错误!
                7. 返回上面的第 1 步,将 Back minSdkVersion 更改为其原始值(以支持尽可能多的 Android 版本)。

                它有效,但问题每隔几天就会出现。我和上面一样,它解决了,让我发展。

                【讨论】:

                  【解决方案15】:

                  除了已经建议的丢失类文件的原因之外,此错误还可能表示类文件重复,当构建路径上的类文件使用在构建路径中具有多个定义的另一个类时,eclipse 会报告此错误。

                  【讨论】:

                    【解决方案16】:

                    由于你给我们的细节很少,很可能你做了什么,这是一个非常容易犯的错误,而不是前往

                    Build Path > Configure Build Path > Projects

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

                    Build Path > Configure Build Path > Libraries

                    并从那里添加您的项目文件夹。

                    如果您的代码全部正确,但在通过 ctrl+space 快捷方式自动重新组织导入时,绝对是这种情况,而不是您的导入语句引用 com.your.additionalproject,您的引用都指向 bin.com。你的附加项目。

                    注意垃圾箱。这意味着您通过将其他项目文件夹结构视为库来间接引用您的类,使您的 IDE 完成所有工作来查找您所指的确切二进制类。

                    要更正此问题,请从库中删除该文件夹,然后将其添加到“项目”选项卡下,然后重新组织您的导入。您的项目应该可以正常运行。

                    【讨论】:

                      【解决方案17】:

                      当我使用新的 eclipse 版本并尝试使用旧 eclipse 版本使用的以前的工作区时,发生了此错误。

                      这是我解决问题的方法:

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

                      仅供参考。

                      【讨论】:

                        【解决方案18】:

                        在我的情况下,这是我向 pom.xml 文件添加新依赖项的结果。

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

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

                        就我而言,这就像锁定新版本一样简单。您可以通过右键单击该条目来执行此操作 - 在上下文菜单中有一个将其锁定的选项。

                        【讨论】:

                          【解决方案19】:

                          对我来说,上述解决方案均无效。 对我有用的是选择类中的所有代码,然后将其转换为注释, 保存,然后转换回普通文本,错误就消失了。

                          【讨论】:

                            【解决方案20】:

                            在我的情况下,在 Tomcat 中启动 Web 应用程序时,问题是“javax.ws.rs.webapplicationexception 无法解决”。

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

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

                            【讨论】:

                              【解决方案21】:

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

                              【讨论】:

                                【解决方案22】:

                                将构建路径中的 JRE 指向 JDK。这对我有用。

                                【讨论】:

                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-11-14
                                  • 1970-01-01
                                  • 2017-07-26
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多