当前位置: 代码迷 >> 综合 >> maven + thymeleaf 无法实例化bean错误记载
  详细解决方案

maven + thymeleaf 无法实例化bean错误记载

热度:11   发布时间:2023-12-15 08:00:39.0

最近公司新开项目 想练点新技术,于是乎选用了thymeleaf做前台 jsp做后台,IDE选用的是IDEA,(就是这么智能的IDE导致我两天都在查这个错误)

但是在配置环境的过程中tomcat启动无限报

错误: BeanCreationException
错误描述:
Error creating bean with name 'templateEngine' defined in URL [file:/C:/Users/chuan/Desktop/jshShow/target/jshShow/WEB-INF/classes/springMVC-servlet.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.thymeleaf.spring4.SpringTemplateEngine
错误信息:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'templateEngine' defined in URL [file:/C:/Users/chuan/Desktop/jshShow/target/jshShow/WEB-INF/classes/springMVC-servlet.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.thymeleaf.spring4.SpringTemplateEngineat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1105)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1050)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667)at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633)at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681)at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552)at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493)at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)at javax.servlet.GenericServlet.init(GenericServlet.java:158)at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1188)at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1132)at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:811)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1156)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2527)at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2516)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.thymeleaf.spring4.SpringTemplateEngineat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:526)at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098)... 36 more

百度 google翻遍前十页也没找到错误原因,以为是thymeleaf配置解析视图错误,贴下代码

原配置:

<!-- thymeleaf视图 --><bean id="templateResolver"class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"><property name="prefix" value="/WEB-INF/templates/" /><property name="suffix" value=".html" /><property name="templateMode" value="HTML5" /></bean><bean id="templateEngine"class="org.thymeleaf.spring4.SpringTemplateEngine"><property name="templateResolver" ref="templateResolver" /></bean><bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver"><property name="templateEngine" ref="templateEngine" /></bean>

修改各种版本包括thymeleaf官网的xml配置,代码如下:

!-- Thymeleaf View Resolver - implementation of Spring's ViewResolver interface --><bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver"><property name="templateEngine" ref="templateEngine" /><property name="characterEncoding" value="UTF-8" /></bean><!-- Thymeleaf Template Engine (Spring4-specific version) --><bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine"><property name="templateResolvers"><set><ref bean="templateResolver" /></set></property></bean><!-- Thymeleaf Template Resolver --><bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"><property name="prefix" value="/WEB-INF/templates/" /><property name="templateMode" value="HTML" /></bean>
无论哪个配置文件 最后报错的原因都是
Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.thymeleaf.spring4.SpringTemplateEngineat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:526)at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1098)... 36 more

无论修改什么配置最底层错误都是无法实例化Bean,单独使用Jsp视图配置时就可以正常启动,万般查询无果(jdk版本,spring版本,配置文件,加载顺序,thymleaf版本等等),只能对着网上的配置文件一点一点删除修改,无聊怎么改,都是统统报错,最后莫名其妙看了一眼pom.xml配置文件发现idea的pom.xml配置文件自动生成了一个:

<build><finalName>jshShow</finalName><pluginManagement><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>3.0.0</version></plugin><plugin><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.20.1</version></plugin><plugin><artifactId>maven-war-plugin</artifactId><version>3.2.0</version></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.5.2</version></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.8.2</version></plugin></plugins></pluginManagement></build>
虽然不明白到底是什么意思 但是删除后thymeleaf配置文件正常跑通,晚上回去看看一看这里面到底是做什么的
  相关解决方案