87

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

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

[错误] /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。

4

17 回答 17

41

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

于 2013-01-04T21:51:35.897 回答
37

更新到 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>
于 2013-09-01T15:58:06.300 回答
9

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

于 2016-09-21T15:26:32.063 回答
6

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

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

要解决这个问题:

  1. 从构建路径中删除 JAR 文件
  2. 添加到构建路径
  3. mvn compile
于 2016-07-31T15:38:45.043 回答
4

就我而言,我使用的是范围为<scope>test</scope>. 这使得该类在开发时可用,但是在编译时,我收到了这条消息。

转动班级范围以<scope>provided</scope>解决问题。

于 2018-08-14T23:02:59.770 回答
3

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

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

<executions>
    <execution>
        <goals>
             <goal>repackage</goal>
        </goals>
    </execution>
</executions>
于 2018-04-20T12:40:27.387 回答
2

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

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

于 2013-09-23T10:39:27.107 回答
2

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

于 2017-09-15T11:13:06.887 回答
1

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

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

于 2021-01-19T06:07:09.333 回答
0

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

于 2013-01-04T20:26:25.603 回答
0

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

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

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

于 2017-08-10T11:10:13.413 回答
0

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

于 2021-08-14T15:14:30.133 回答
-1

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

于 2013-01-04T20:49:57.363 回答
-1

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

于 2016-12-29T18:58:46.420 回答
-1

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

于 2017-07-11T02:33:14.697 回答
-1

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

于 2018-07-03T05:08:35.887 回答
-1

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

于 2018-10-12T17:25:36.037 回答