Maven测试编译使用openjdk-7;openjdk-8失败(找不到符号)

Maven测试编译使用openjdk-7;openjdk-8失败(找不到符号),maven,java-8,openjdk,Maven,Java 8,Openjdk,tl;dr在我的机器上升级java openjdk-7-->openjdk-8会破坏我的构建 我有一个正在运行的maven项目,配置为使用Java1.7。一些值得注意的依赖项是{com.google.dagger,com.google.protobuf,com.nativelibs4java javacl}。我之所以提到这些,是因为它们的生成源阶段非常重要 我的操作系统是Ubuntu 14.10 $ uname -a Linux computer_name 3.13.0-43-generic

tl;dr在我的机器上升级java openjdk-7-->openjdk-8会破坏我的构建

我有一个正在运行的maven项目,配置为使用Java1.7。一些值得注意的依赖项是{
com.google.dagger
com.google.protobuf
com.nativelibs4java javacl
}。我之所以提到这些,是因为它们的生成源阶段非常重要

我的操作系统是Ubuntu 14.10

$ uname -a
  Linux computer_name 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
我正在运行Java1.7和Maven 3.0.5

$ mvn -version
  Apache Maven 3.0.5
  Maven home: /usr/share/maven
  Java version: 1.7.0_75, vendor: Oracle Corporation
  Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
  Default locale: en_US, platform encoding: UTF-8
  OS name: "linux", version: "3.13.0-43-generic", arch: "amd64", family: "unix"
我的POM的一个片段,演示了我显式地设置Java 1.7:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.2</version>
  <configuration>
    <source>1.7</source>
    <target>1.7</target>
  </configuration>
</plugin>
现在

$ mvn clean install (heavily truncated)
...
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ physics ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to ~/target/test-classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] ~/src/test/java/com/package/engine/EngineApplicationTest.java:[20,23] cannot find symbol
  symbol:   class EngineComponent
  location: class com.package.engine.EngineApplicationTest
...
[INFO] 18 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
...
编译阶段成功完成。测试编译阶段没有所有18个错误都是测试代码试图访问主java代码中存在的代码的地方。似乎maven为测试组合类路径的方式在某种程度上没有在新的改进的openjdk-8编译器中进行解析

此外,我可以确认在Maven运行期间,我的本地目录中没有被修改的文件

为了完成,我将更新我的POM(此操作的实际目标)


org.apache.maven.plugins
maven编译器插件
3.2
1.8
1.8
同样的结果——构建失败


请随意询问更广泛的代码片段。我尽了最大努力避免把这个问题拖得更长,但我意识到我可能遗漏了相关信息。

Oracle Java 8也出现了同样的问题。我偶然发现,新的Java编译器通常会更改错误的格式,maven编译器插件的解析能力落后。换句话说,我收到的错误消息是不完整的。我需要手动运行javac来获得完整的信息。问题是,考虑到在我的构建中发生的非平凡的代码生成,我不知道如何进行;在我写上一篇评论的时候,eclipse找到了我让它去获取的生成文件。我可以确认这些测试是在eclipse中使用Java8构建和运行的。尽管令人失望,但解决方法是eclipse中的[Project>Clean]。我可以使用maven进行依赖关系管理,使用eclipse进行构建。这在短期内是有效的,因为我的项目还远没有准备好供公众使用。最好是使用
mvn-X clean install | tee mvn.log
来运行整个构建,而且如果能够共享导致问题的代码就更好了……否则在Maven编译器中很难解决这个问题插件。
$ mvn clean install (heavily truncated)
...
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ physics ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 8 source files to ~/target/test-classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] ~/src/test/java/com/package/engine/EngineApplicationTest.java:[20,23] cannot find symbol
  symbol:   class EngineComponent
  location: class com.package.engine.EngineApplicationTest
...
[INFO] 18 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
...
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.2</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
  </configuration>
</plugin>