J'ai un problème lorsque j'essaie d'intégrer Spring Boot 1.3.5.RELEASE et Thymeleaf 3.0.0.Release. Je sais que Spring Boot prend désormais en charge la version 3 de Thymeleaf, aussi j’essaie de contourner ce problème de la manière suivante:
@SpringBootApplication(exclude={org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration.class})
et ajouter ma propre configuration SpringWebConfig . malheureusement reçu une erreur comme ceci:
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 (e.g. if you put a @ComponentScan in the default package by mistake)
C'est beaucoup plus simple, il suffit de lire ceci: http://docs.spring.io/spring-boot/docs/1.5.x/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>
botte à ressort 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>
Pour le projet Maven, ajoutez simplement la ligne suivante sur pom.xml
<properties>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties>
Pour un projet Gradle, créez un fichier gradle.properties avec le contenu suivant.
thymeleaf.version=3.0.2.RELEASE
thymeleaf-layout-dialect.version=2.1.1
Comme indiqué dans la documentation de 1.4.7.RELEASE: https://docs.spring.io/spring-boot/docs/1.4.7.RELEASE/reference/htmlsingle/#howto-use-thymeleaf- 3
Si vous utilisez Gradle, mettez ceci dans le fichier build.gradle:
Gradle: build.gradle
ext['thymeleaf.version'] = '3.0.2.RELEASE'
ext['thymeleaf-layout-dialect.version'] = '2.1.1'
Si vous utilisez Maven, mettez ceci dans le fichier pom.xml:
Maven: pom.xml
<properties>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
</properties>
(Comme je n'ai pas assez de réputation, j'ai posté une réponse plutôt qu'un commentaire sur l'une des réponses précédentes. Surtout la partie build.gradle.)
Spring Boot 1.3.3 fonctionne avec Thymeleaf 3 avec cette classe de configuration. Je me souviens d'avoir dû travailler pour contourner cette même exception. De plus, ThymeleafAutoConfiguration est exclue de ma configuration automatique, comme dans la vôtre.
@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's 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();
}
}
(Resolver.setPrefix, resolver.setSuffix et resolver.setTemplateMode peuvent ne plus être nécessaires, mais ils l'étaient avec la première version bêta.)
Faites simplement le pas à pas
1. ajout de dépendance pour thymeleaf.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2. ajout de dépendance pour le dialecte thymeleaf.
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
</dependency>
3. Autoconfiguration SpringBoot pour thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.check-template=true
spring.thymeleaf.check-template-location=true
spring.thymeleaf.enabled=true
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.prefix=/WEB-INF/html/
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML
spring.thymeleaf.reactive.max-chunk-size=0