这是一个非常简单的问题,它可能是我不知道的地方,但Google对这个问题特别无益,给出了有关编译错误的结果,而不是如何更改编译错误消息。
当我使用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。
答案 0 :(得分:37)
这是Maven编译器插件中的bug,我认为它与JDK7有关。适用于JDK6。
答案 1 :(得分:34)
更新到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>
答案 2 :(得分:6)
在我的情况下问题是在一个没有重建的子jar中,因为我添加了一个新类,那个子jar的pom.xml与我失败的pom.xml没有关系作为子到父关系(使用<parent>
代码)。所以我重建了儿童jar,之后错误就消失了。
答案 3 :(得分:4)
我遇到了同样的问题。原因是我没有通过Maven依赖项添加两个JAR文件,因此当我运行mvn compile
时,控制台显示错误错误:
无法找到符号,Class ......“。
修复它:
mvn compile
答案 4 :(得分:2)
即使我使用的是Java 7,maven 2.2.1也遇到了同样的错误,我从我的pom中删除了<scope>tests</scope>
并使用了
mvn clean -DskipTests=true install
成功构建我的项目,而不升级我的maven版本。
答案 5 :(得分:2)
这是因为这个问题,即你在POM文件中定义的重新打包。
从maven插件下的pom文件中删除它。它会起作用
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
答案 6 :(得分:2)
就我而言,我正在使用范围为<scope>test</scope>
的依赖项。这样可以在开发时使用该类,但是在编译时,我收到了此消息。
打开<scope>provided</scope>
的类范围可以解决此问题。
答案 7 :(得分:1)
这不是Maven的功能;它是编译器的一个功能。仔细观察;您正在寻找的信息很可能在以下行中。
答案 8 :(得分:1)
如果您使用 Intellij 并且上述解决方案不起作用,请尝试: 文件 > 使缓存无效/重新启动
这对我有用。 有时,当您通过多个分支工作时,IDE 会使用其缓存并且无法在缓存中找到该文件,因此在编译过程中会显示错误。
答案 9 :(得分:0)
我的猜测是编译器抱怨注释无效。我注意到Eclipse没有显示所有错误,比如注释中数组末尾的逗号。但标准javac
确实如此。
答案 10 :(得分:0)
在尝试在项目上运行Maven安装时,我在Eclipse STS中遇到了类似的问题。我已经更改了该项目的pom.xml文件的依赖项中的某些版本以及这些依赖项所指向的项目。我通过在我更改的所有项目上运行Maven安装然后再次在原始项目上运行安装来解决它。
答案 11 :(得分:0)
我和maven有同样的问题。碰巧我的问题是,maven正在生成具有不同案例名称的文件夹。我期待一个.service.MyFile但是在目标文件夹中它是Service / MyFile而java是区分大小写的。我花了几个小时才发现,建议你看一下。
答案 12 :(得分:0)
解决方案:@Before构建组件(使用mvn clean install)。构建整个项目一次并再次构建组件
为什么这样:
我多次得到这个错误。
大多数时候我会尝试单独构建我的组件(因为我没有在其他地方进行更改)。
是的,但最近下载的额外jar可能会受到第三方(在其组件内)所做的更改的影响。在整个项目上进行完整的mvn clean安装已经多次保存了
答案 13 :(得分:0)
如果您依赖于工作空间中的某些其他项目并且这些项目未正确构建,则可能会出现此类错误。 首先尝试建立这样的依赖项目,这可能会有所帮助
答案 14 :(得分:0)
通常,当您的编译代码版本与书面代码版本不同时,将出现此错误。 例如,编写依赖于xxx-1.0.0.jar的代码,其中一个类具有方法A,但该方法在xxx-1.1.0.jar中更改为B。如果使用xxx-1.1.0.jar编译代码,则会看到错误。
答案 15 :(得分:0)
也许您应该检查IDE区分大小写的属性。 我遇到了同样的问题,并通过使Idea区分大小写来解决(因为我的文件系统区分大小写): https://confluence.jetbrains.com/display/IDEADEV/Filesystem+Case-Sensitivity+Mismatch