一、問題描述
今天在執行單元測驗時遇到了一個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 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510664.html
標籤:Java
