匯出專案war包的時org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
今天匯出專案war包的時候遇到這個問題,花了挺久時間解決,做個筆記總結一下。
本次專案中使用的版本是1.6,因為伺服器上面的java環境是1.6,所以不能更改專案的版本號,當時將專案導成war包的時候出錯了,錯誤程式碼如下:
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)
先了解一下java的version分別對應的版本號,這個很重要,版本衝突在專案移植中經常遇到。
J2SE 8 = 52,
J2SE 7 = 51,
J2SE 6.0 = 50,
J2SE 5.0 = 49,
JDK 1.4 = 48
看到“Unsupported major.minor version 51.0”首先想到的是jdk1.7版本;按照平常的想法,修改了編譯器compiler也為1.6,將jdk和jvm都設為1.6但是還是報錯。去網上查詢說法,原因很明顯是因為編譯和執行的版本衝突,只需要修改為同版本就行了。
嘗試將jdk修改為1.7,成功執行專案。平時個人練習的話可以任意修改java的版本號,但是因為公司伺服器上面的版本號規定是1.6了,高版本的程式是無法在上面跑起來的,陷入了兩難的境況。
那麼又是什麼原因導致了專案上面最低只能部署jdk為1.7。其實仔細看報錯的程式碼:
org/apache/maven/cli/MavenCli
1
可以發現真正令jdk版本衝突的是maven版本。maven正常的流程是需要程式設計師手動部署的,但是因為ide越來越智慧,不需要部署就可以使用maven,我使用的是ecplise,自帶的maven版本是3.5.3。
知道了版本號,一般途徑是去官網檢視版本協議
這個是官網主頁上就有的,大意是maven3.3最低支援jdk1.7.我的ecplise自帶的maven是3.5,很明顯不能使用jdk1.6。現在只需要在maven的官網上面下載版本號低於3.3的在安裝到電腦上就可以了。具體的安裝maven就不詳述了,網上有很多的安裝教程。安裝並配置好maven的環境後,在ecplise上搜索maven並add安裝目錄地址上去即可。
總結:一般的報錯都會把錯誤資訊描述的比較完整,我一開始報錯的時候是盲目的複製資訊到網上百度,而不是自己先理清一遍錯誤資訊,知道是版本衝突而不知道真正導致的原因,浪費了很多時間,最後在公司前輩幫助下解決問題。
————————————————
版權宣告:本文為CSDN博主「滿小滿」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/mjm_1251162714/article/details/86509385