Maven“找不到符号”消息无济于事


81

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

当我使用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。


您可以提供一些版本信息(尤其是Maven)等吗?这不是我发生的事情。
戴夫牛顿

确实,行家“找不到符号”消息不是很有帮助。我可以告诉您我的代码很长时间使用第三方库的特定方法,但是以某种方式从第三方库中删除了该方法。当maven编译代码时,它失败了。如果该消息是“未找到方法”而不是“找不到符号”,那么它将非常有效且耗时较少。
Atul S.

对于那些愿意为该问题添加另一个答案的人。 仔细阅读问题。 这与如何解决“找不到符号”编译错误(在Maven中)无关。这是关于如何使Maven提供更多有用的编译错误消息的方法; 即包含源代码上下文的消息...喜欢javacAnt喜欢。
史蒂芬C

Answers:


41

这是Maven编译器插件中的一个错误,与我认为的JDK7有关。与JDK6兼容。


5
似乎已在maven-compiler-plugin 3.1中修复。请参阅george-papatheodorou的答案。
杰瑞德·贝克

28
这不是解决方案.. Java 8中仍然会发生编译错误
Eta

Windows 10崩溃时开始发生。可能是一个因素吗?
TheRealChx101 '19

1
致@Eta(还有27位左右为上述评论+1的人)-我认为您没有抓住重点。这个问题是关于来自Maven的无用信息。该答案讨论了如何使编译错误消息更有用。它不能解决最初导致编译错误的问题。这个问题(通常)在您的源代码中!请参阅“找不到符号”或“无法解析符号”错误是什么意思?
史蒂芬C

35

更新到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>

确定此插件最新版本的最佳方法是什么?我只能找到的页面是:maven.apache.org/plugins/maven-compiler-plugin/…谢谢。
杰里德·贝克


6

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


这也是我的问题。虽然Maven中肯定存在一些错误,但是我希望在大多数情况下,此类情况可以解释Maven错误或构建问题。
迈克尔M,

4

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

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

要解决这个问题:

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

2
您能否列出从构建路径中删除JAR文件所使用的步骤?当我尝试删除目标文件夹并使用Maven重新编译时,出现相同的错误吗?谢谢
turnip424 '18

3

发生此问题的原因也在于此问题,即重新打包您在POM文件中定义的文件。

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

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

3

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

打开类范围以<scope>provided</scope>解决问题。


2

即使我正在使用Java 7,Maven 2.2.1并收到相同的错误,我也<scope>tests</scope>从pom中删除了它并使用了

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


“ mvn clean -DskipTests = true”安装是一个神奇的命令!谢谢分享。(顺便说一句,我没碰过我的<scope> tests </ scope>)
Eta

1

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


0

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


我遇到了同样的错误。随后的错误给出了项目中缺少的依赖项的名称(在本例中为org.apache.poi.xssf库类)。
约翰

0

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

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

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


-1

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


它抱怨的那条线是fakeThing = new JPanel()。这只是javac会针对其显示“ fakeThing”的标准“找不到符号”错误。专家只是不显示它。
mattg 2013年

-1

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


-1

我对Maven也有同样的问题。碰巧我的问题是,Maven生成了带有不同大小写名称的文件夹。我原本以为.service.MyFile,但是在目标文件夹中是Service / MyFile,而Java是区分大小写的。我花了几个小时才找到答案,建议您检查一下。


-1

通常,当您的编译代码版本与书面代码版本不同时,将出现此错误。例如,编写依赖于xxx-1.0.0.jar的代码,其中一个类具有方法A,但该方法在xxx-1.1.0.jar中更改为B。如果使用xxx-1.1.0.jar编译代码,则会看到该错误。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.