maven“找不到符号”的消息无益

时间:2013-01-04 20:23:47

标签: java maven compiler-errors settings

这是一个非常简单的问题,它可能是我不知道的地方,但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。

16 个答案:

答案 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 ......“。

修复它:

  1. 从构建路径中删除JAR文件
  2. 添加到构建路径
  3. 运行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