之前一直都用的jar包,今天想debug裡面的代碼,所有想把spring兩個需要研究代碼的jar包作為源碼引入,在spring下載源碼解壓,引入項目工程如圖:
然後觀察,裡面的一下代碼也在報錯,貌似引用了一些其他的jar包,暫時沒管它如圖:
然後啟動項目,控制台保存如下:
debug報錯代碼發現在 RequestMappingHandlerAdapter類執行代碼resolvers.add(new ServletRequestMethodArgumentResolver()); 報錯
然後進入看此類發現它居然import了這個東西:
百度一下發現java.time.ZoneId不是Java8的東西嗎?
我現在就想問,為啥之前用jar包的時候也沒報錯啊?
jar包的版本和source的版本都是4.0.5,我把jar包反編譯了,class類裡面也在引用import java.time.ZoneId; 這個東西。
Java環境也同樣是在7上。
其實人家發布4.0的時候已經支持Java8特性了,你可以選擇在編譯的時候支持這些特性。
不過Spring Frame在打包的時候已經能夠做到自動感知你的環境決定版本了。
也就是lib包會根據你的環境加載類,
但是代碼就做不到了,你可以選擇eclipse 為Jdk8 版本,complie 選項run config選項裡面制定你的運行環境
參考鏈接:
https://spring.io/blog/2015/04/03/how-spring-achieves-compatibility-with-java-6-7-and-8
覺得說得對,就打賞吧,不對就來交流一下你的想法。