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

时间:2015-02-15 23:15:31

标签: maven java-8 openjdk

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

我有一个配置为使用Java 1.7的工作maven项目。一些值得注意的依赖项是{com.google.daggercom.google.protobufcom.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>

同样的结果 - 建立失败。

随意请求更广泛的代码段。我已经尽力避免让这个问题更长,但我意识到我可能遗漏了相关信息。

0 个答案:

没有答案