一、背景
现在大家用的JDK版本一般都是1.8。但是,总有一些已经无法重构的老项目,我们不敢动,只敢加代码,它还维持着可怕的1.6版本。基于这样的设定,JDK版本为1.8的工程,提供api包,给老工程(JDK版本为1.6)使用,老工程启动时,出现了如下异常
java.lang.UnsupportedClassVersionError:
com/yx/picture/api/domain/resultDO/PictureFileAndInfoDO :
Unsupported major.minor version 52.0
(unable to load class com.yx.picture.api.domain.resultDO.PictureFileAndInfoDO)
二、解决过程
1. 直白的翻译:不支持的类版本错误,被支持的版本是52.0【CET-4飘过,见谅】
2. 版本52是啥呢?如下
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
3. 所以略微思考一下:支持JDK1.8,不支持当前环境JDK1.6。也有大佬是这么说的,编译版本低于运行版本【手动滑稽】
4. 解决方案:
plan A: 低版本升级
适用于小工程,比如自己的工程【不是】。业务复杂度较低的,升级版本影响不大。
plan B: 高版本降级
如果低版本的工程,业务复杂,历史包袱重,大动作风险较高,那可以打一个低版本的api包,给低版本工程使用。
5. 如何打一个低版本的包: pom指定版本就好,工程本身的JDK版本无需改动orz
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>