美文网首页Java 杂谈
Could not initialize class org.h

Could not initialize class org.h

作者: jerrik | 来源:发表于2018-11-21 14:57 被阅读0次
    说明

    详细错误日志:

    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来分钟查看问题。说明自己还有待提升,至少从日志的设计层面又加深了一层认识。

    相关文章

      网友评论

        本文标题:Could not initialize class org.h

        本文链接:https://www.haomeiwen.com/subject/vwhcqqtx.html