Spring Integration with Boot and Thymeleaf 3.0.0.RELEASE

I have a problem when I try to integrate Spring Boot 1.3.5.RELEASE and Thymeleaf 3.0.0.Release. I know that Spring Boot now supports version of Thymeleaf 3, so I am trying to solve this problem as follows:

@SpringBootApplication(exclude={org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration.class}) 

and add my own SpringWebConfig configuration. Unfortunately, an error was received:

 java.lang.ClassNotFoundException: org.thymeleaf.resourceresolver.IResourceResolver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_66] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_66] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_66] at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_66] ... 37 common frames omitted Wrapped by: java.lang.NoClassDefFoundError: org/thymeleaf/resourceresolver/IResourceResolver wrapped by: java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration due to org/thymeleaf/resourceresolver/IResourceResolver not found. M ake sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (eg if you put a @ComponentScan in the default package by mistake) 
+5
source share
5 answers

This is much simpler, just read the following: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-use-thymeleaf-3

 <properties> <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version> </properties> 
+13
source

spring boot 1.4.0 + thymeleaf 3.0.1

  <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.1.RELEASE</version> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring4</artifactId> <version>3.0.1.RELEASE</version> </dependency> <dependency> <groupId>nz.net.ultraq.thymeleaf</groupId> <artifactId>thymeleaf-layout-dialect</artifactId> <version>2.0.3</version> </dependency> 
+2
source

I have Spring Boot 1.3.3 working with Thymeleaf 3 using this configuration class. I remember that I had to work to get around the same exception. In addition, ThymeleafAutoConfiguration is excluded in my autorun setup, as in yours.

 @Configuration @EnableConfigurationProperties(ThymeleafProperties.class) @ConditionalOnClass(SpringTemplateEngine.class) @AutoConfigureAfter(WebMvcAutoConfiguration.class) public class ThymeleafConfiguration extends WebMvcConfigurerAdapter implements ApplicationContextAware { private ApplicationContext applicationContext; @Autowired ThymeleafProperties properties; public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @Bean public ViewResolver viewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); resolver.setCharacterEncoding("UTF-8"); return resolver; } private TemplateEngine templateEngine() { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.addTemplateResolver(urlTemplateResolver()); engine.addTemplateResolver(templateResolver()); // pre-initialize the template engine by getting the configuration. It a side-effect. engine.getConfiguration(); return engine; } private ITemplateResolver templateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setApplicationContext(applicationContext); resolver.setPrefix("classpath:templates/"); resolver.setSuffix(".html"); resolver.setTemplateMode(TemplateMode.HTML); resolver.setCacheable(properties.isCache()); return resolver; } private UrlTemplateResolver urlTemplateResolver() { return new UrlTemplateResolver(); } } 

(Perhaps the required resolver.setPrefix, resolver.setSuffix, and resolver.setTemplateMode are no longer needed, but they were with the first beta.)

0
source

I have the same problem, I would like to upgrade from Spring Boot 1.3.8 to 1.4.2. Because it was a pain, updating everything in one go, I am preparing my project from part to part. After I upgraded to Hibernate5, I already found this post that it is possible to update thimeleaf. I use thimeleaf with Apache slabs. I have the same error java.lang.ClassNotFoundException: org.thymeleaf.resourceresolver.IResourceResolver

What I have now in Parent POM:

 <properties> <java-version>1.8</java-version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <hibernate.version>5.0.11.Final</hibernate.version> <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version> <com.mysema.querydsl-version>[3.7.1,3.8.0)</com.mysema.querydsl-version> </properties> 

My configuration file:

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties; import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.thymeleaf.extras.tiles2.dialect.TilesDialect; import org.thymeleaf.extras.tiles2.spring4.web.configurer.ThymeleafTilesConfigurer; import org.thymeleaf.extras.tiles2.spring4.web.view.ThymeleafTilesView; import org.thymeleaf.spring4.SpringTemplateEngine; import org.thymeleaf.spring4.view.ThymeleafViewResolver; import at.hemisoft.bbsng.client.mvc.TimeoutCallableProcessingInterceptor; @SpringBootApplication(exclude={org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration.class}) @EnableConfigurationProperties(ThymeleafProperties.class) @ConditionalOnClass(SpringTemplateEngine.class) @AutoConfigureAfter(WebMvcAutoConfiguration.class) public class WebMvcConfig extends WebMvcConfigurationSupport implements ApplicationContextAware{ @Autowired private ApplicationContext applicationContext; @Autowired public SpringTemplateEngine templateEngine; @Bean public ThymeleafTilesConfigurer tilesConfigurer() { final ThymeleafTilesConfigurer configurer = new ThymeleafTilesConfigurer(); configurer.setDefinitions("classpath*:/templates/**/views.xml"); return configurer; } @Bean public ThymeleafViewResolver thymeleafViewResolver() { final ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setApplicationContext(applicationContext); resolver.setViewClass(ThymeleafTilesView.class); resolver.setTemplateEngine(templateEngine); resolver.setCharacterEncoding(UTF_8); return resolver; } @Bean public TilesDialect tilesDialect() { return new TilesDialect(); } // @Value("${server.session-timeout}") private Long sessionTimeOut; @Override public void configureAsyncSupport(final AsyncSupportConfigurer configurer) { configurer.setDefaultTimeout(sessionTimeOut * 1000L); configurer.registerCallableInterceptors(timeoutInterceptor()); } @Bean public TimeoutCallableProcessingInterceptor timeoutInterceptor() { return new TimeoutCallableProcessingInterceptor(); } } 

On startup, I get:

 java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration#characterEncodingFilter due to org/thymeleaf/resourceresolver/IResourceResolver not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (eg if you put a @ComponentScan in the default package by mistake) at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:55) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:102) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod(ConfigurationClassBeanDefinitionReader.java:178) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:140) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:333) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) ~[spring-context-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:760) [spring-boot-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:360) [spring-boot-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:306) [spring-boot-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1185) [spring-boot-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1174) [spring-boot-1.3.8.RELEASE.jar:1.3.8.RELEASE] at at.hemisoft.bbsng.client.mvc.ApplicationClientMvc.main(ApplicationClientMvc.java:27) [classes/:na] Caused by: java.lang.NoClassDefFoundError: org/thymeleaf/resourceresolver/IResourceResolver at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_111] at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[na:1.8.0_111] at java.lang.Class.getDeclaredMethods(Unknown Source) ~[na:1.8.0_111] at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:612) ~[spring-core-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:524) ~[spring-core-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:510) ~[spring-core-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:570) ~[spring-core-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:683) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:627) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:597) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1445) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:975) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE] at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry$OptimizedBeanTypeRegistry.addBeanTypeForNonAliasDefinition(BeanTypeRegistry.java:320) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry$OptimizedBeanTypeRegistry.addBeanType(BeanTypeRegistry.java:309) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.BeanTypeRegistry$OptimizedBeanTypeRegistry.getNamesForType(BeanTypeRegistry.java:290) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.OnBeanCondition.collectBeanNamesForType(OnBeanCondition.java:183) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getBeanNamesForType(OnBeanCondition.java:172) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchingBeans(OnBeanCondition.java:140) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.OnBeanCondition.getMatchOutcome(OnBeanCondition.java:114) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-1.3.8.RELEASE.jar:1.3.8.RELEASE] ... 17 common frames omitted Caused by: java.lang.ClassNotFoundException: org.thymeleaf.resourceresolver.IResourceResolver at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_111] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_111] at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_111] at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_111] ... 37 common frames omitted 
0
source

For a Maven project, just add the following line to pom.xml

 <properties> <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version> </properties> 

For a gradle project, create a gradle.properties file with the following contents

 thymeleaf.version=3.0.2.RELEASE thymeleaf-layout-dialect.version=2.1.1 
0
source

All Articles