Maven编译打包过程(clean install)中遇到相关jdk版本导致的问题
来源:互联网 发布:sql server 2008 sa 编辑:程序博客网 时间:2024/06/16 16:21
Unsupported major.minor version 51.0 解决方案
在日常开发中遇到:时抛出异常Unsupported major.minor version 51.0
1: 一种是maven版本太高,而你编译使用的jdk版本太低导致
2: 一种是项目中编译时,使用jdk编译太低,而项目中引用的相关jar包编译的jdk版本太高导致
使用eclipse Mars.2 Release (4.5.2)版本, 用的Maven版本为:3.3.9,但是我执行一个简单的clean命令会报如下错误:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401) at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:254) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239) at org.codehaus.plexus.classworlds.launcher.Launcher.getMainClass(Launcher.java:144) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:266) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) at org.codehaus.classworlds.Launcher.main(Launcher.java:47) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
去网上搜了下,说是jdk版本问题,后来去官网看了一下,就明白了!
原来Maven的不同版本对Jdk的版本是有要求的,因为公司的jdk是1.6的,所以果断下了个3.2.5版,一切就正常了。
Unsupported major.minor version 51.0错误,百度一查是因为低版本的 JVM 无法加载高版本的 class 文件造成的,翻译为:不支持的版本 major.minor version 51.0 。major.minor version 51.0,表示jdk版本为1.7(类似,50.0表示1.6,49.0表示1.5....),
运行junit测试报javax/servlet/ServletContext : Unsupported major.minor version 51.0错误
问题描述:
- java.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor version 51.0
- at java.lang.ClassLoader.defineClass1(Native Method)
- at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
- at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
- at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
- at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
- at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
- at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
- at java.security.AccessController.doPrivileged(Native Method)
- at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
- at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
- at java.lang.Class.getDeclaredConstructors0(Native Method)
- at java.lang.Class.privateGetDeclaredConstructors(Class.java:2398)
- at java.lang.Class.getConstructor0(Class.java:2708)
- at java.lang.Class.getDeclaredConstructor(Class.java:1987)
- at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:105)
- at org.springframework.test.context.TestContextManager.retrieveTestExecutionListeners(TestContextManager.java:232)
- at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
- at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:120)
- at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:109)
- at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
- at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
- at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
- at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
- at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)
- at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)
- at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
- at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
- at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
- at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
- at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
- at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
- at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
- at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
- at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
原因是由于工程中使用到了servlet-api的jar包依赖,如下
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- <scope>provided</scope>
- </dependency>
由于这个jar包是用jdk1.7编译的,我的工程是用jdk1.6,于是发生了以上错误。
ps:之前没写单元测试,开发环境都是部署在tomcat下测试的,由于这个jar包的scope是provider,意味着servlet-api不会部署到tomcat低下(打war包也不会打进去),而是用tomcat自身的servlet-api,所以没有发现以上错误。
解决方案:
把servlet-api的版本换成用jdk1.6编译的版本就可以了,我用的是
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.0.1</version>
- <scope>provided</scope>
- </dependency>
类似有:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project ppay-export: Compilation failure
[ERROR] Failure executing javac, but could not parse the error:
[ERROR] 错误:构造处理程序对象 org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor : Unsupported major.minor version 51.0 时抛出异常
[ERROR] -> [Help 1]
[ERROR] Failure executing javac, but could not parse the error:
[ERROR] 错误:构造处理程序对象 org/apache/logging/log4j/core/config/plugins/processor/PluginProcessor : Unsupported major.minor version 51.0 时抛出异常
[ERROR] -> [Help 1]
阅读全文
0 0
- Maven编译打包过程(clean install)中遇到相关jdk版本导致的问题
- Maven编译打包项目 mvn clean install 遇到的错误
- 更改maven打包JDK版本时遇到的问题汇总
- Ambari部署,编译,打包过程中遇到的问题
- 如何解决编译过程中遇到ASN1C相关的问题
- maven编译过程中遇的相关问题
- eclipse 中Maven项目 的maven install 、build 、clean
- Python打包过程中遇到的问题
- jdk版本和sdk版本不一致问题导致无法打包
- Storm编译打包过程中遇到的一些问题及解决方法
- 解决maven update project jdk编译版本变化的问题
- cocos2d-x 3.4版本游戏打包AKP (重点记录如何解决打包过程中遇到的各种问题)
- Apusic1.1.2安装过程中遇到的jdk相关问题解答
- Maven打包时指定JDK的版本
- maven打包不同jdk版本的包
- 设置Eclipse中Maven编译的JDK版本
- 设置Eclipse中Maven编译的JDK版本
- 编译avPlayer过程中遇到的问题
- Nginx 安装部署
- Linux安装Redis,设置密码,使用Java连接
- 微信小程序获取获取openid
- 通过ContentObserver监听数据库某表的增加、删除、更新动作,实现listView异步单项Item的刷新
- Java面试之路(一)Java基础部分
- Maven编译打包过程(clean install)中遇到相关jdk版本导致的问题
- 杭电oj1865
- 透明度测试与透明度混合详解《unity shader入门精要》学习笔记
- LINTCODE————最小划分
- 程序员 30 岁前,该如何规划自己的职业发展?
- 淡入淡出js 原生实现以及css 实现方法
- 最不可思议的巧合,这些电影一定是穿越者拍的了!
- 腾讯换logo了!还出了套“腾讯字体”:6763个汉字 !
- 简单的计算100000以内的质数(JAVA实现)