1、錯誤信息:
嚴重: Servlet.service() for servlet [springMvc] in context with path [/DocSystem] threw exception [Handler dispatch failed; nested exception is java.lang.UnsupportedClassVersionError: org/apache/poi/hwpf/HWPFDocument : Unsupported major.minor version 52.0 (unable to load class org.apache.poi.hwpf.HWPFDocument)] with root cause
java.lang.UnsupportedClassVersionError: org/apache/poi/hwpf/HWPFDocument : Unsupported major.minor version 52.0 (unable to load class org.apache.poi.hwpf.HWPFDocument)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3209)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:1373)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1861)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
at util.LuceneUtil2.addIndexForWord(LuceneUtil2.java:361)
at util.LuceneUtil2.addIndexForRDoc(LuceneUtil2.java:322)
at util.LuceneUtil2.updateIndexForRDoc(LuceneUtil2.java:592)
at com.DocSystem.controller.DocController.updateIndexForRDoc(DocController.java:625)
at com.DocSystem.controller.DocController.addDoc(DocController.java:1507)
at com.DocSystem.controller.DocController.uploadDoc(DocController.java:570)
2、問題原因:JDK版本不一致
2.1 分析
- 在eclipse中開發的項目有個Java build path中可以配置的JDK
- java compiler中可以配置compiler level{eclipse>windows>preferences>java>compiler>compiler compliance level}
兩個是有區別的:
- build path的JDK版本是你開發的時候編譯器需要使用到的,就是你在eclipse中開發代碼,給你提示報錯的,編譯的過程;
- java compiler compliance level中配置的編譯版本號,這個編譯版本號的作用是,你這個項目將來開發完畢之後,要放到服務器上運行,那個服務器上JDK的運行版本。
問題就是,build path中配置1.7的JDK,java compiler compliance level中配置的1.7,但是程序運行需要的是1.8的JDK,就報了那個錯誤,反之亦然。
build path的JDK版本是你開發的時候編譯器需要使用到的,例如用的JDK1.4就不能使用泛型。而java compiler compliance level設置的是你寫好的JAVA代碼按照什麼JDK版本級別編譯,例如:設置的是1.4,編譯出來的class文件可以在1.4以上的JRE上運行,如果用的是5.0級別編譯,就不能運行在1.4的環境裏面。
在eclipse中進行開發的時候,build path 中JDK進行類庫的編譯(就是你使用類在不在這個JDK中),java compiler compliance level是對這個項目語法的編譯(就是你的項目中語法的正確與否),在開發的過程中,這兩個地方是都起作用的。所以說,build path 和 java complier compliance level和服務器配置的JDK保持一致,就不會出現任何問題的。
stanford parser和jdk版本對應關係
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 |
參考文檔:
http://stackoverflow.com/questions/10382929/unsupported-major-minor-version-51-0