Maven "cannot find symbol"信息不够明确

98

这是一个非常简单的问题,可能是某个我不知道的设置,但是谷歌在回答这个问题方面并不是很有帮助,给出的结果都是关于编译错误而不是如何更改编译错误消息的。

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

[ERROR] /path/to/source/Main.java:[13,8] error:无法找到符号

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

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


你能提供一些版本信息吗(特别是Maven)等等?这对我来说不是发生的情况。 - Dave Newton
确实,Maven的“找不到符号”信息并不是很有用。我可以告诉你我的情况,我的代码长期使用第三方库的特定方法,但某种方式该方法已从第三方库中删除。当Maven编译代码时,它会失败。如果消息是“找不到方法”而不是“找不到符号”,那么它将非常有效且节省时间。 - Atul S.
1
对于那些想要在此问题中添加另一个答案的人,请仔细阅读问题。它不是关于如何修复(Maven中的)“找不到符号”编译错误的问题,而是关于如何让Maven提供更多信息的编译错误消息;即包括源代码上下文的消息...像javacAnt一样。 - Stephen C
17个回答

0
这不是 Maven 的功能,而是编译器的功能。仔细看看;你要查找的信息很可能在下一行中。

我也遇到了同样的错误。随后的错误提示指出项目中缺少一个依赖项(在这种情况下是 org.apache.poi.xssf 库类)。 - John

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

-1
我在使用maven时遇到了同样的问题。原来我的问题是,maven生成的文件夹名称大小写不一致。我期望得到一个.service.MyFile文件,但实际在目标文件夹中却是Service/MyFile,而Java是区分大小写的。我花费了几个小时才找到原因,建议你也去检查一下。

-1

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

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

-1

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


它抱怨的那一行是 fakeThing = new JPanel()。这只是javac会显示“fakeThing”的标准“找不到符号”错误。但maven没有显示它。 - mattg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接