Nginx平滑升級版本 一,查看現目前版本,準備預升級版本的安裝包 #查看nginx版本 /usr/local/nginx/sbin/nginx -v #測試nginx訪問是否正常,此處開放的為19999埠 #新建下載目錄 mkdir -p /home/nginx #下載預升級版本的安裝包 wge ...
一、問題描述
今天在執行單元測試時遇到了一個NoSuchMethodError錯誤,完整的報錯信息如下:
...
Caused by: javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:102)
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.<init>(ResourceBundleMessageInterpolator.java:45)
at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolator(ConfigurationImpl.java:423)
at org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultMessageInterpolatorConfiguredWithClassLoader(ConfigurationImpl.java:575)
at org.hibernate.validator.internal.engine.ConfigurationImpl.getMessageInterpolator(ConfigurationImpl.java:364)
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:144)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:331)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:103)
at com.focus.candy.rpc.IValidation.<clinit>(IValidation.java:23)
... 65 more
Caused by: java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:98)
... 74 more
這意思是說,想要程式調用javax.el.ExpressionFactory.newInstance這個方法,但是到ExpressionFactory裡面一看,哈,這個方法他不!存!在!。
他這麼大一個方法,怎麼好好的就沒了呢?
好吧,這就是接下來要調查的事情。
二、排查過程
一般來說,應該是在類路徑裡面有兩個類名相同,包路徑也相同的類。
程式調到了錯誤的同名類,所以找不到方法。
讓我們來看看到底是哪個jar包的小可愛在這搗亂。
使用idea的同學請雙擊Shift鍵,全局搜索ExpressionFactory。(使用其他IDE的同學請自行查閱相關手冊)
查找的結果如下:
在jsp-api-2.1.jar和javax.el-api-2.2.4.jar裡面都存在javax.el.ExpressionFactory。
然後把類打開看看,發現jsp-api-2.1.jar裡面的ExpressionFactory沒有newInstance方法。
好吧,把jsp-api-2.1.jar排掉,問題解決。
三、解決方法
嗯,把jsp-api-2.1.jar排掉。
不過這不是重點。重點是找到衝突的類,然後解決這個衝突。
解決方法有可能是排除不需要的jar包,也可能是升級jar包或者換個jar包,這個要依據當時的情況來看了。
本文由博客一文多發平臺 OpenWrite 發佈!