tl; dr 在我的机器上升级java openjdk-7 - > openjdk-8打破了我的构建
我有一个配置为使用Java 1.7的工作maven项目。一些值得注意的依赖项是{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
我正在运行Java 1.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 compile
返回BUILD SUCCESS。
现在,让我们升级java安装。为了不删除一长串java-dependents,我先添加java 8,然后删除java 7。
$ sudo apt-get install openjdk-8-jdk
$ sudo apt-get --purge remove openjdk-7-jdk openjdk-7-jre openjdk-7-jre-headless
$ mvn -version
Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.8.0_40-internal, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-43-generic", arch: "amd64", family: "unix"
现在,
$ 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(此操作的实际目标)
<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>
同样的结果 - 建立失败。
随意请求更广泛的代码段。我已经尽力避免让这个问题更长,但我意识到我可能遗漏了相关信息。