一、背景
現在大家用的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>