Maven测试编译使用openjdk-7;openjdk-8失败(找不到符号)
tl;dr在我的机器上升级java openjdk-7-->openjdk-8会破坏我的构建 我有一个正在运行的maven项目,配置为使用Java1.7。一些值得注意的依赖项是{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
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>