jar包JDK版本降级
当我们引入的jar包和本地的jdk版本有冲突的情况下,会报一下错误:
java.lang.UnsupportedClassVersionError:com/sun/tools/javac/Main :
Unsupported major.minor version 51.0 //证明这个jar包是jdk7编译的,和本地jdk不兼容
我们知道Java是支持向后编译的,也就是说,在低版本(如JDK6)上编译的class文件或者jar文件可以在高版本上(如JDK8)上编译通过,但这并不意味着在JDK7上编译的class文件就可以在JDK5上顺利通过编译。为什么?因为高版本通常有很多低版本不支持的新特性。想想看,你能够在JDK5上编译含有lambda表达式或者Stream API的代码吗?当然不行。即便你没有使用那些低版本不支持的新特性,每个class文件都有一个major或者minor版本号,这是存在于Java编译器中的,并且和JDK的版本号是对应的,下面我们列出对应JRE的major版本号:
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
我们可以发现Java8的major版本号是52,这就意味着如果你使用JDK8执行javac命令,将会默认生成一个major版本号为52的class文件,如果你使用JDK7运行这个class文件,你就会收到"Unsupported major.minor version 52.0"。
以上部分只是大概解释了,为什么会出现这样的错误,那么现在重点来了,实际的解决方案如下:
公司现有的项目是JDK6,我们需要导入新的jar包,但是它会与jdk6不兼容,所以要强制给jar依赖的jdk版本进行降级。使用一个工具Retrotranslator进行降级操作。
使用方法,如下所示,在dos窗口下执行命令
java -jar D:\retrotranslator-transformer-1.2.7.jar -srcjar F:\jar\jsoup\jsoup-1.11.1.jar -destjar F:\new-jsoup-jdk1.5.jar -embed com.cn.internal -target 1.5