成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

java.lang.NoSuchMethodError異常

weknow619 / 3042人閱讀

摘要:今天在對(duì)項(xiàng)目進(jìn)行國際化改造時(shí)遇到了這個(gè)異常。最后查出是由于包沖突導(dǎo)致這個(gè)異常的發(fā)生。我創(chuàng)建了兩個(gè)簡單的工程對(duì)這個(gè)異常情景進(jìn)行模擬。現(xiàn)在部署這個(gè)工程,會(huì)得到這個(gè)異常。雖然異常名字不同,但反映的還是這個(gè)類沒有這個(gè)屬性。

今天在對(duì)項(xiàng)目進(jìn)行國際化改造時(shí)遇到了java.lang.NoSuchMethodError這個(gè)異常。最后查出是由于jar包沖突導(dǎo)致這個(gè)異常的發(fā)生。下面描述這個(gè)異常發(fā)生的情景。
我創(chuàng)建了兩個(gè)簡單的maven工程對(duì)這個(gè)異常情景進(jìn)行模擬。其中一個(gè)工程是test_dependency,它的maven配置如下,這個(gè)工程有一個(gè)spring-2.5.6依賴。

另一個(gè)工程是test,它的主要maven配置如下。

test是一個(gè)war類型的工程,它依賴于spring-X-3.2.1.RELEASE的一些jar包,并且依賴前面的test_dependency,這樣就導(dǎo)致了test工程間接依賴了spring-2.5.6這個(gè)jar?,F(xiàn)在test工程中同時(shí)存在了兩個(gè)spring版本,并且注意spring-x-3.2.1.RELEASE是在spring-2.5.6之前被依賴的。
在spring的配置文件中,有下面的用于國際化的bean配置。

其中basename是資源文件的名字,defaultEncoding是編碼格式,如果沒有defaultEncoding,那么中文會(huì)亂碼。
現(xiàn)在部署這個(gè)工程,會(huì)得到BeanCreationException這個(gè)異常。異常主要內(nèi)容如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name "messageSource" defined in class path resource [context.xml]: Error setting property values; nested exception is 
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property "defaultEncoding" of bean class [org.springframework.context.support.ResourceBundleMessageSource]: Bean property "defaultEncoding" is not writable or has an

這個(gè)異常大致內(nèi)容就是說ResourceBundleMessageSource這個(gè)類沒有defaultEncoding這個(gè)屬性。
ctrl加鼠標(biāo)左鍵查看ResourceBundleMessageSource這個(gè)類的源碼,確實(shí)有defaultEncoding這個(gè)屬性?。?br>spring配置文件不行,嘗試直接通過方法調(diào)用設(shè)置編碼。在spring配置文件中去掉defaultEncoding的配置。在servlet中加入如下代碼:

ResourceBundleMessageSource messageSource = springContext.getBean(ResourceBundleMessageSource.class);
messageSource.setDefaultEncoding("utf-8");

這次啟動(dòng)web成功了,但是訪問接口時(shí)又報(bào)了下面的異常。

雖然異常名字不同,但反映的還是ResourceBundleMessageSource這個(gè)類沒有defaultEncoding這個(gè)屬性。
查看源碼明明是有defaultEncoding這個(gè)屬性的,可是卻報(bào)沒有這個(gè)屬性的異常。于是執(zhí)行mvn dependency:tree命令查看所有依賴的jar包,終于發(fā)現(xiàn)了除了spring3.x的依賴外,還有一個(gè)spring-2.5.6的依賴。查看spring-2.5.6的源碼,發(fā)現(xiàn)它也有一個(gè)ResourceBundleMessageSource類,并且這個(gè)類中沒有defaultEncoding這個(gè)屬性。看來當(dāng)部署war包時(shí),使用的類是來自于spring-2.5.6這個(gè)jar,而不是來自于spring3.x。修改maven的配置如下,排除對(duì)spring-2.5.6的依賴,問題就解決了。

發(fā)生這個(gè)異常要滿足下面的條件:
1.首先工程類型必須是war,如果是jar的話不會(huì)發(fā)生這個(gè)異常。
2.其次是spring-3.x的依賴必須在spring-2.5.6的前面配置,否則編譯時(shí)就會(huì)報(bào)錯(cuò)找不到這個(gè)屬性,也就不會(huì)發(fā)生這個(gè)異常了。
可是為什么在編譯的時(shí)候使用spring-3.x依賴,運(yùn)行時(shí)卻使用spring-2.5.6這個(gè)依賴呢?感覺這真是maven的一個(gè)大坑啊。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70233.html

相關(guān)文章

  • java.lang.NoSuchMethodError: antlr.collections.AST

    摘要:具體操作如下在下,在文本框中搜索選擇第二種可能性解決主要是里面的和中的與沖突刪除即可,具體方法在下,在文本框中搜索選擇在該應(yīng)用的目錄刪除目前貌似就這么兩種解決方法吧親測(cè)第一種可用 showImg(https://segmentfault.com/img/bVOIUy?w=590&h=49); showImg(https://segmentfault.com/img/bVOIXc?w=5...

    Zachary 評(píng)論0 收藏0
  • 異常?。?!

    摘要:常見的異常列出四五種,是基本要求。該異常經(jīng)常被稱為強(qiáng)制類型轉(zhuǎn)換異常。違法的狀態(tài)異常。數(shù)組大小為負(fù)值異常。屬性不存在異常。是所有虛擬機(jī)正常操作期間可以被拋出的異常的父類。由安全管理器拋出,用于指示違反安全情況的異常。字符串索引越界異常。 常見的異常列出四五種,是基本要求。更多的。。。。需要注意積累了 常見的幾種如下: NullPointerException - 空指針引用異常Class...

    booster 評(píng)論0 收藏0
  • JVM類加載思維導(dǎo)圖

    摘要:用一張思維導(dǎo)圖盡可能囊括一下的類加載過程的全流程。本文參考自來自周志明深入理解虛擬機(jī)第版,拓展內(nèi)容建議讀者可以閱讀下這本書。 用一張思維導(dǎo)圖盡可能囊括一下JVM的類加載過程的全流程。 本文參考自來自周志明《深入理解Java虛擬機(jī)(第2版)》,拓展內(nèi)容建議讀者可以閱讀下這本書。 showImg(http://ocxhn1mzz.bkt.clouddn.com/class%20loadin...

    Crazy_Coder 評(píng)論0 收藏0
  • Java? 教程(常見問題及其解決方案)

    常見問題(及其解決方案) 編譯器的問題 Microsoft Windows系統(tǒng)上常見的錯(cuò)誤消息。 javac is not recognized as an internal or external command, operable program or batch file 如果你收到這個(gè)錯(cuò)誤,Windows將無法找到編譯器(javac)。 這里有一種方法可以告訴Windows哪里可以找到j(luò)a...

    netmou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<