Maven/Jenkins出现java.lang.UnsupportedClassVersionError错误:Unsupported major.minor version 51.0

11
我有一个Jenkins服务器,上面同时安装了JDK和JRE 6和7。
除了一个依赖于1.7的项目外,所有项目都是基于1.6构建的。
我已经配置了maven pom文件,使用JAVA_HOME_7环境路径中的Java编译器。
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <showDeprecation>true</showDeprecation>
                    <showWarnings>true</showWarnings>
                    **<executable>${env.JAVA_HOME_7}/bin/javac</executable>**
                    <fork>true</fork>
                    <verbose>false</verbose>
                </configuration>
            </plugin>

在执行mvn install时,我遇到了以下错误:

java.lang.RuntimeException: There was an error in the forked process
java.lang.UnsupportedClassVersionError: : Unsupported major.minor version 51.0

我认为这意味着服务器正在使用 JRE 1.6。

如何保留 JRE 1.6 并与 1.7 一起使用,以保持与旧的 1.6 项目和新的 1.7 项目的兼容性?

非常感谢, Atanas


也许你正在运行一些单元测试或集成测试作为构建的一部分,例如使用Maven Surefire或Failsafe插件?这些测试是否也使用Java 7?(因为看起来Jenkins正在分叉一个进程来使用Java6 JVM运行某些东西)。 - sbk
是的,你说得对,我正在使用surefire插件运行junit套件,那里的代码依赖于JDK 7,因为在-source 1.6中不支持multi-catch语句。 - Atanas Kanchev
4个回答

12

你需要使用Java 7来运行Surefire测试。默认情况下,Surefire将使用与运行Maven的JVM相同的JVM - 在你的情况下是Java 6。

  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.13</version>
      <configuration>
        ...
        <jvm>${env.JAVA_HOME_7}/bin/java</jvm>
      </configuration>
    </plugin>
  </plugins>

4
我记得我也曾经为这个问题苦恼过。按照以下步骤解决该问题:
原因:当安装多个JRE时,系统中也会安装多个java.exe文件。
解决方案:修改你的环境变量PATH,并改变java.exe的顺序。将java.exe的位置放在第一位,像下面的代码一样:
PATH = C:\Program Files\Java\jdk1.6.0\; 其他;其他;其他
根据你的使用和安装位置更改上述位置。

0

我遇到过这个问题不止一次,这是因为您的系统上有多个版本的jdk(jre),所以只需将JAVA_HOME设置为编译项目所使用的正确jdk,运行就会很好。


-1

请查看您的target/lib目录,您可能有两个相同jar包的版本。对我来说,这会导致问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接