说明
详细错误日志:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl
at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:33)
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276)
at org.springframework.boot.validation.MessageInterpolatorFactory.getObject(MessageInterpolatorFactory.java:53)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$ValidatedLocalValidatorFactoryBean.<init>(ConfigurationPropertiesBindingPostProcessor.java:411)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.getValidator(ConfigurationPropertiesBindingPostProcessor.java:368)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.determineValidator(ConfigurationPropertiesBindingPostProcessor.java:352)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:314)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
本来这种NoClassDefFoundError、NullPointerException之类的异常都没有任何解决问题的价值,更没有必要单独写一篇博客来介绍这个问题;但是确实还是想吐槽一下~
问题来源
本工程采用了maven构建,查看maven依赖树的时候发现很多logging冲突,自然而然的利用<exclusion>把不必要的依赖项给去除掉,所有就有了这么一段配置:
<exclusion>
<groupId>jboss-logging</groupId>
<artifactId>org.jboss.logging</artifactId>
</exclusion>
加上我的hibernate-validator的版本是5.3.5.final,下意识的解决方法就是换个4.3.5版本的包解决就够了。确实是,换个版本就完美解决了.但是我还是想探个究竟,看是什么妖魔在作怪!!classpath下也有这个类ConfigurationImpl,但就是创建对象失败!
下面开始定位
jboss.logging下就这么几个类:
image.png
莫非ConfigurationImpl强依赖了其中的某个Log?,而不是slf4j/log4j/logback之类的,哪怕你用common-logging也不至于报创建对象失败。果不其然,请看:
image.png
链进去看一下:
image.png
瞬间有一种想打人的冲动,在hibernate-validator一个公共组件里竟然加入自己的日志模板!不得不佩服大佬们的做法~ 不过问题解决就好了!
总结
遇到这个问题,没有立马反应过来,还是花了10来分钟查看问题。说明自己还有待提升,至少从日志的设计层面又加深了一层认识。
网友评论