Maven和Eclipse Mars编译Java 1.8错误

8

我使用Eclipse

 Version: Mars.2 Release (4.5.2)
 Build id: 20160218-0600

还有Maven(mvn -v)

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T13:57:37+02:00)
Maven home: C:\Daten\maven
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_60\jre
Default locale: de_DE, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

我的%JAVA_HOME%已设置为

C:\Program Files\Java\jdk1.8.0_60

我的Java版本是(java -version)。

java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

我使用 -vm 参数(指定java jdk版本)来运行eclipse并在其中添加外部maven安装。导入项目后,出现了一些奇怪的问题。有些类在eclipse中是红色的,而有些不是。我使用javap -version命令检查它们都是使用主版本52进行编译的。我创建了一个新的工作区并得到了相同的结果,非常奇怪。如果我使用eclipse打开一个“红色”的Java类,并保存它,则可以消除错误(没有编译错误)。
我真的不知道问题出在哪里。
以下是我在eclipse中遇到的错误:
Syntax error on token "package", assert expected
Syntax error on token "import", throw expected

作为父POM,我使用版本为1.3.3-RELEASE的spring-boot-starter-parent。我还指定了所有我知道的属性,如java.version、maven.compiler.source/target和项目构建源和输出编码。我也尝试了定义maven编译器插件,但没有帮助。
以下是代码示例:
package com.test;
public class AExample {
    public static void main(String[] args) {
        System.out.println(args.length);
    }
}

看起来它完全依赖于我放置类的包。 对于某些包,它只是正常编译,而对于某些包,则会出现以下错误

com.test cannot be resolved to a type   AExample.java   line 1
Illegal modifier for the local class AExample; only abstract or final is permitted  AExample.java   line 3
Syntax error on token "package", assert expected    AExample.java   line 1
Syntax error, insert "ClassBody" to complete ClassDeclaration   AExample.java   line 3
The nested type AExample cannot hide an enclosing type  AExample.java   line 3

在不同的包中完全相同的类没有产生那个错误,只在一个特定的包中出现。有什么想法我可以检查吗?


你正在使用新的m2e插件(附带于Eclipse或至少在WTP捆绑包中),旧版本在新版本中表现异常。你是否检查了你的工作区属性:Java > JRE 是否为Java 8? - Andy
是的,这是我的me2插件,并且我确保使用的是1.8版本。在Java中,使用JRE和编译器,在Eclipse中。 - borehack
提供的代码示例和更多错误消息。真的只发生在某些包中,而不是其他包中... 有什么想法吗? - borehack
1
在我的情况下,另一个文件中存在一个未解决的冲突。显然,Eclipse Mars和/或Java 8 Eclipse编译器在依赖文件出现某些类型的编译错误后,无法以有意义的方式编译/构建其他文件,而是对那些由于错误的依赖关系而无法构建的文件显示了似乎是胡言乱语的错误信息。 - Richard Sitze
1
@Richard Sitze...是的,那就是问题所在。我检查并解决了其他问题。之后错误消失了。真的很奇怪...谢谢。如果你把这个作为答案,我可以接受这个答案吗?! - borehack
显示剩余3条评论
1个回答

6
可能有一个实际的编译错误导致了其他所有错误。 关注它。 在我的情况下,我有一个文件缺少 '} '。 通过浏览整个错误列表,找到不是“语法错误”或“无法将foo解析为bar”的错误,我能够找到该文件。
从评论中得知:
在我的情况下,另一个文件存在未解决的冲突。 显然,eclipse-mars和/或java8 eclipse编译器在依赖文件中出现某些类型的编译错误后无法以有意义的方式编译/构建其他文件,而是对无法构建的文件产生看似无意义的错误。
(此答案基于Richard Sitze的评论,供将来发现此问题的其他人参考。)

谢谢,这正是我的情况。我有一个以 ClassName:: 结尾的悬挂行,显然这导致编译器在项目中的每个文件上基本上出问题,导致 600 多个错误。 - BeeOnRope
完美的答案。Eclipse在我的项目中产生了成千上万的错误。为了找到我这种情况下缺失的“}”,我从命令行运行了Java编译器。经过数小时的搜索,我在几秒钟内找到了罪魁祸首。 - jofeu

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