Junit上出现Unsupported major.minor version 51.0错误,但非Web应用程序。

4

我正在我们的应用服务器上运行Junits,但出现了不支持的major.minor版本号51.0的故障。然而,网络应用程序构建、部署和运行正常。我不明白为什么会这样。我的Maven编译器配置如下:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId> 
  <version>2.3.2</version>
  <configuration>
    <verbose>true</verbose>
    <fork>true</fork>
    <source>1.7</source>
    <target>1.7</target>
    <executable>${JAVA_1_7_HOME}/bin/javac</executable>
    <encoding>ISO-8859-1</encoding>
    <verbose>true</verbose> 
  </configuration>
</plugin>

我的Junit依赖项:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <scope>test</scope>
  <version>4.10</version>
</dependency> 

有人能够想到为什么这个失败了吗?


2
看起来你的应用服务器上安装的 Java 版本比较旧(指 JRE 而非编译器)。 - Tom Anderson
2
你如何执行Maven构建本身?确保它使用当前版本的Java运行时。 - Thomas
https://dev59.com/Fmkv5IYBdhLWcg3wvDXq - srkavin
我同意这听起来像是用于编译WAR/Junits的JDK版本与用于运行Junits的JRE版本不同。Maven使用什么机制来确定要用哪个“Java”来运行Junits?(这在Linux上运行)。我有一些应用程序在此应用服务器上运行,但只有一个应用程序在版本错误时失败其Junits。非常奇怪。 - Todd
更具体地说,用于编译代码的JDK比运行代码的JDK更新。虚拟机(JVM)向后兼容但不向前兼容。 - Jeff Richley
这篇文章可能对你有所帮助:https://www.baeldung.com/java-lang-unsupportedclassversion - XoXo
1个回答

6

Maven-surefire-plugin负责运行JUnit测试。尝试添加以下配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId> 
  <version>2.16</version>
  <configuration>
    <jvm>${JAVA_1_7_HOME}/bin/javac</jvm>
  </configuration>
</plugin>

应用服务器上的JAVA_HOME指向Java 6。因此,应用程序使用Java 7进行构建(如编译器插件中指定),但Maven在运行Junits时使用JAVA_HOME JRE(Java 6)。Surefire插件解决了这个问题。谢谢大家! - Todd

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