Maven& Eclipse Mars编译java 1.8错误

时间:2016-04-12 18:14:40

标签: java eclipse maven

我使用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,我在eclipse中添加了外部maven安装。在我导入项目并获得strang行为之后。有些类在eclispe中是红色的,有些则不是。我用javap -version检查它们都是用主要版本52编译的。我创建了新的工作区并获得了相同的结果。很奇怪。如果我打开"红色"使用eclipse的Java类,只需保存就可以了(没有编译错误)。

我真的不知道这是什么问题。

我在日食中遇到的错误

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

在不同的包中完全相同的类没有产生该错误。只是在特定的包装中。任何想法,我可以检查?

1 个答案:

答案 0 :(得分:6)

埋藏在某处可能是一个导致所有其他错误的实际编译错误。专注于此。在我的情况下,我有一个文件缺少}。我可以通过浏览整个错误列表找到该文件,查找不是Syntax error on tokenfoo cannot be resolved to a bar的错误。

来自评论:

  

就我而言,另一个文件中存在未解决的冲突。显然,eclipse-mars和/或java8 eclipse编译器在依赖文件中的某些类型的编译错误之后无法以有意义的方式编译/构建其他文件,而是为那些不可能出现的文件显示出乱码错误建立对坏的依赖

(这个答案基于Richard Sitze的评论,对于将来发现这个问题的其他人来说。)