【问题标题】:maven "cannot find symbol" message unhelpfulmaven“找不到符号”消息无用
【发布时间】:2012-12-19 07:39:36
【问题描述】:

这是一个非常简单的问题,它可能是我不知道的某个地方的设置,但谷歌对这个问题特别没有帮助,给出关于编译错误的结果,而不是如何更改编译错误消息。

当我使用 maven 构建项目时,它会给我错误消息,格式大致如下:

[ERROR] /path/to/source/Main.java:[13,8] 错误:找不到符号

当我使用 ant 或 javac 构建时,它实际上会告诉我它在错误消息中找不到的符号。 maven 给了我一个行号和字符位置,但显示实际符号会更有帮助。上面的行是每个“找不到符号”错误的唯一行。上面或下面没有给出符号的线。我想必须有某种方法让 maven 告诉我这些信息,但我不知道它是什么。我尝试了 -e 选项,因为 mvn 告诉我尝试使用它,但它为错误提供了 maven 回溯,而不是实际符号。

有什么帮助吗?

这是 mvn --version 的输出

Apache Maven 3.0.4 (rNON-CANONICAL_2012-10-24_11-25_mockbuild; 2012-10-24 07:25:04-0400)
Maven home: /usr/share/maven
Java version: 1.7.0_09-icedtea, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.9.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.6.6-1.fc17.x86_64", arch: "amd64", family: "unix"

这是一个示例(无用)错误消息,与 maven 的输出完全相同(只是缩短了目录):

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /path/to/source/SoundEngineFilePanel.java:[33,8] error: cannot find symbol
[ERROR]  class SoundEngineFilePanel
/path/to/source/SoundEngineFilePanel.java:[36,8] error: cannot find symbol
[INFO] 2 errors 
[INFO] -------------------------------------------------------------

它找不到的符号是“fakeThing”和“fakeThing2”,而不是 SoundEngineFilePanel。

【问题讨论】:

  • 你能提供一些版本信息(特别是Maven)等吗?这不是发生在我身上的事。
  • 确实,maven“找不到符号”消息不是很有帮助。我可以告诉你我的情况,我的代码长时间使用第三方库的特定方法,但不知何故,该方法已从第三方库中删除。当 maven 编译代码时它失败了。如果消息是“找不到方法”而不是“找不到符号”,那么它会非常有效且耗时更少。
  • 致那些愿意为这个问题添加另一个答案的人。 仔细阅读问题。这不是关于如何修复“找不到符号”编译错误(在 Maven 中)。它是关于如何让 Maven 提供更多信息的编译错误消息;即包含源代码上下文的消息...例如javacAnt

标签: java maven compiler-errors settings


【解决方案1】:

我收到了这个错误。要解决此问题,在项目 -> BuildPath -> TestNG 上,我必须取消选中“使用项目 TestNG jar”应用并关闭。在下一次运行“mvn compile”时,构建成功。

【讨论】:

    【解决方案2】:

    如果您使用的是 Intellij 并且上述解决方案不起作用,请尝试: 文件 > 使缓存无效/重新启动

    这对我有用。 有时,当您在多个分支中工作时,IDE 会使用其缓存并且在缓存中找不到文件,因此在编译过程中会显示错误。

    【讨论】:

      【解决方案3】:

      也许您应该检查您的 IDE 区分大小写的属性。 我遇到了同样的问题,并通过使 Idea 区分大小写来解决它(因为我的文件系统区分大小写): https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch

      【讨论】:

        【解决方案4】:

        在我的例子中,我使用了一个范围为 <scope>test</scope> 的依赖项。这使得该类在开发时可用,但在编译时,我收到了这条消息。

        <scope>provided</scope>的类作用域转为解决问题。

        【讨论】:

          【解决方案5】:

          通常,当您的编译代码版本与您编写的代码版本不同时,就会出现此错误。 比如写一个依赖xxx-1.0.0.jar的代码,其中一个类有方法A,但是xxx-1.1.0.jar中的方法改成了B。如果你用 xxx-1.1.0.jar 编译代码,你会看到错误。

          【讨论】:

            【解决方案6】:

            发生这种情况也是因为这个问题,即您在 POM 文件中定义的重新打包。

            从 maven 插件下的 pom 文件中删除它。它会工作

            <executions>
                <execution>
                    <goals>
                         <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            

            【讨论】:

              【解决方案7】:

              如果您在工作空间中依赖于其他一些项目并且这些项目没有正确构建,则可能会出现此类错误。 尝试先构建这样的依赖项目,它可能会有所帮助

              【讨论】:

                【解决方案8】:

                这是Maven编译器插件中的bug,我认为与JDK7有关。在 JDK6 上运行良好。

                【讨论】:

                • 似乎已在 maven-compiler-plugin 3.1 中修复。请参阅george-papatheodorou 的回答。
                • 这不是一个解决方案.. 编译错误仍在 java 8 中发生。
                • Windows 10 崩溃时开始发生。这可能是一个因素吗?
                • 致@Eta(以及其他 27 位左右为上述评论 +1 的人)——我认为你没有抓住重点。这个问题是关于来自 Maven 的无用消息。这个答案讨论了如何使编译错误消息更有帮助。它并没有解决首先导致编译错误的问题。这个问题(通常)在您的源代码中!见What does a “Cannot find symbol” or “Cannot resolve symbol” error mean?
                【解决方案9】:

                解决方案:@在构建组件之前(使用 mvn clean install)。一次构建整个项目,然后再次构建您的组件

                为什么会这样:
                我多次收到此错误。 大多数时候我会尝试单独构建我的组件(因为我没有在其他地方进行更改)。

                是的,但是最近下载的那个额外的 jar 可能会受到第三方(在他们的组件内部)所做的更改的影响。在整个项目上进行完整的 mvn 全新安装为我节省了很多次

                【讨论】:

                  【解决方案10】:

                  我对 maven 也有同样的问题。碰巧我的问题是,maven 正在生成具有不同案例名称的文件夹。我期待一个 .service.MyFile 但在目标文件夹中它是 Service/MyFile 并且 java 是区分大小写的。我花了几个小时才找到,建议你检查一下。

                  【讨论】:

                    【解决方案11】:

                    尝试在项目上运行 Maven 安装时,我在 Eclipse STS 中遇到了类似的问题。我已经更改了该项目的 pom.xml 文件的依赖项中的一些版本以及这些依赖项指向的项目。我通过在我更改的所有项目上运行 Maven 安装然后再次在原始项目上运行安装来解决它。

                    【讨论】:

                      【解决方案12】:

                      在我的情况下,问题出在一个未重建的子 jar 中,因为我添加了一个新类,该子 jar 的 pom.xml 与我失败的 pom.xml 作为子父关系无关(使用&lt;parent&gt; 标签)。所以我重建了错误消失的子 jar。

                      【讨论】:

                      • 这也是我的问题。虽然 Maven 中肯定存在错误,但我希望在大多数情况下,Maven 错误或构建问题可以通过诸如此类的场景来解释。
                      【解决方案13】:

                      我遇到了同样的问题。原因是我有两个JAR文件没有通过Maven依赖添加,所以当我运行mvn compile时,控制台显示错误错误:

                      找不到符号,类..."。

                      修复它:

                      1. 从构建路径中删除 JAR 文件
                      2. 添加到构建路径
                      3. 运行mvn compile

                      【讨论】:

                      • 能否请您列出用于从构建路径中删除 JAR 文件的步骤?当我尝试删除目标文件夹并使用 maven 重新编译时遇到同样的错误?谢谢
                      【解决方案14】:

                      即使我使用的是 Java 7、maven 2.2.1 并且遇到了同样的错误,我还是从我的 pom 中删除了 &lt;scope&gt;tests&lt;/scope&gt; 并使用了

                      mvn clean -DskipTests=true install 成功构建我的项目,无需升级我的 maven 版本。

                      【讨论】:

                      • "mvn clean -DskipTests=true" 安装是一个神奇的命令!谢谢分享。 (顺便说一句,我没有碰我的 tests
                      【解决方案15】:

                      更新到 3.1:

                        <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-compiler-plugin</artifactId>
                          <version>3.1</version>
                          <configuration>
                              <source>1.7</source>
                              <target>1.7</target>
                          </configuration>
                      </plugin>
                      

                      【讨论】:

                      【解决方案16】:

                      我猜编译器抱怨注释无效。我注意到 Eclipse 不会显示所有错误,例如注释中数组末尾的逗号。但是标准的javac 可以。

                      【讨论】:

                      • 它抱怨的行是fakeThing = new JPanel()。这只是 javac 会显示“fakeThing”的标准“找不到符号”错误。 maven 只是没有显示它。
                      【解决方案17】:

                      这不是 Maven 的功能;它是编译器的功能。仔细看;您要查找的信息很可能在以下行中。

                      【讨论】:

                      • 我遇到了同样的错误。随后的错误给出了项目中缺少的依赖项的名称(在本例中为 org.apache.poi.xssf 库类)。
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-09-05
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-10-19
                      相关资源
                      最近更新 更多