java compliance_java complier compliance level问题引发的思考
http://blog.csdn.net/shan9liang/article/details/17266519
**********************************************
問(wèn)題起源:
今天再在ESB調(diào)用WebService測(cè)試,需要在jboss上部署一個(gè)ejb項(xiàng)目(ejb發(fā)布的webservice),過(guò)去部署好好的代碼,這次再部署上去竟然報(bào)錯(cuò)了,log記錄的錯(cuò)誤如下:
[org.jboss.detailed.classloader.ClassLoaderManager] (HDScanner) Unexpected error during load of:com.jialin.ejb.UserManagerBean
java.lang.UnsupportedClassVersionError: com/jialin/ejb/UserManagerBean : Unsupported major.minor version 51.0
…………
…………
2013-12-11 14:48:34,329 ERROR
[org.jboss.kernel.plugins.dependency.AbstractKernelController]
(HDScanner) Error installing to PostClassLoader:
name=vfszip:/F:/jboss-5.1.0.GA/server/default/deploy/ejb_webservice1.jar/
state=ClassLoader mode=Manual requiredState=PostClassLoader
org.jboss.deployers.spi.DeploymentException: Cannot process metadata
…………
…………
開(kāi)始尋找解決方案:
環(huán)境:
jdk 1.6;
jboss 5.1.0.GA
eclipse 4.2
這里可以配置的jdk,還有個(gè)java compiler中可以配置compiler level(如圖中紅色框)。這兩個(gè)東西就是這個(gè)問(wèn)題的關(guān)鍵。
在eclipse中進(jìn)行開(kāi)發(fā)的時(shí)候,build path 中JDK進(jìn)行類庫(kù)的編譯(就是你使用類在不在這個(gè)JDK中),java
compiler compliance level是對(duì)這個(gè)項(xiàng)目語(yǔ)法的編譯(就是你的項(xiàng)目中語(yǔ)法的正確與否),也可以把java compiler
compliance level中配置的編譯版本號(hào)的作用看作是你這個(gè)項(xiàng)目將來(lái)開(kāi)發(fā)完畢之后,要放到服務(wù)器上運(yùn)行,那個(gè)服務(wù)器上JDK的運(yùn)行版本。
而我的問(wèn)題就出在build path中配置1.6的JDK,java compiler compliance level中配置的1.7(因?yàn)橐郧拔矣眠^(guò)一段時(shí)間1.7)
而在jboss服務(wù)器上是1.6的JDK,就報(bào)了那個(gè)錯(cuò)誤,說(shuō)是編譯所用的jdk(1.7)比運(yùn)行所用的jdk(1.6)高了,這是錯(cuò)誤的。
放在其他人機(jī)器上之所以不報(bào)錯(cuò),是因?yàn)樗膉boss使用的jdk恰恰是1.7。這個(gè)版本是向下兼容的。
再拿個(gè)被人舉過(guò)的例子,如果JDK1.4不能使用泛型。而java compiler compliance
level設(shè)置的是你寫好的JAVA代碼按照什么JDK版本級(jí)別編譯,例如:設(shè)置的是1.4,編譯出來(lái)的class文件可以在1.4以上的JRE上運(yùn)行,如果用的是5.0級(jí)別編譯,就不能運(yùn)行在1.4的環(huán)境里面,會(huì)提示版本過(guò)高。
總結(jié):
1、在開(kāi)發(fā)和部署過(guò)程中,最安全的做法,是build path , java complier compliance level,jboss服務(wù)器配置的JDK都保持一致,就不會(huì)出現(xiàn)任何問(wèn)題的。
2、我們常常關(guān)注build path中jdk的版本和jboss中jdk版本,殊不知他們是通過(guò)?java complier compliance level聯(lián)系起來(lái)的。
有時(shí)候我們并不能僅僅按照網(wǎng)上的解決步驟把問(wèn)題解決了就算萬(wàn)事大吉了。我不得不承認(rèn)這是解決問(wèn)題的捷徑,但從捷徑走過(guò)后,我們應(yīng)分析和總結(jié)問(wèn)題的來(lái)龍去脈,真正理解它的本質(zhì),才算是一種積累,因?yàn)榫W(wǎng)上的解決方案永遠(yuǎn)是針對(duì)過(guò)時(shí)的技術(shù),新技術(shù)暴露的問(wèn)題依然會(huì)讓你手足無(wú)措,但幸好技術(shù)的本質(zhì)是不容易改變的,所以說(shuō),抓住本質(zhì),才是常勝之道。
不知道從什么時(shí)候開(kāi)始,已經(jīng)不再滿足于解決問(wèn)題就好,呵呵。
總結(jié)
以上是生活随笔為你收集整理的java compliance_java complier compliance level问题引发的思考的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java UCI,UCI数据集
- 下一篇: fetch_lfw_people相关