我正在使用HTML和Thymeleaf作为我的前端开发Java Spring Boot Web应用程序。我遇到的问题是,当我尝试运行项目时,我的ThymeleafConfig类会随机出错。我将在下面详细解释,但首先是我的代码。
Pom.xml依赖:
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
ThymeleafConfig类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect;
@Configuration
public class ThymeleafConfig {
@Bean
public SpringSecurityDialect springSecurityDialect() {
return new SpringSecurityDialect();
}
}
所以为了进一步解释,我的代码会很好(根据我的IDE),我的任何一行都没有错误,准备运行。我将运行我的应用程序类来运行我的项目,我将得到编译错误。
IntelliJ会自动打开包含错误的文件,这是我的ThymeleafConfig
类。出现错误时,导入语句import org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect;
行将显示为灰色且无法识别。在课堂上造成错误。
要修复它,我右键单击我的pom.xml
文件 - > Maven - > Reimport。这将重新导入我的所有依赖项,一切都将恢复正常。
我还想强调,每次运行应用程序时都不会发生这种情况。有时它会连续发生3次,有时我会在错误再次出现之前运行5次以上。
我试过mvn clean
没有解决问题。我还将依赖项移动到pom.xml文件中的另一行。
编辑:这是我的Application.java类
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
要运行应用程序,我右键单击此文件,然后单击运行“应用程序”按钮。
Spring boot已经包含了thymeleaf(一个不同的版本),你可能在类路径上有多个版本。 Spring Boot在文档中非常清楚thymeleaf:
默认情况下,spring-boot-starter-thymeleaf使用Thymeleaf 2.1。如果您使用的是spring-boot-starter-parent,则可以通过覆盖thymeleaf.version和thymeleaf-layout-dialect.version属性来使用Thymeleaf 3,例如:
<properties> <thymeleaf.version>3.0.0.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.0.3</thymeleaf-layout-dialect.version> </properties>
...
如果您使用任何其他自动配置的Thymeleaf Extras(Spring Security,Data Attribute或Java 8 Time),您还应该将其每个版本覆盖为与Thymeleaf 3.0兼容的版本。
如果你看看spring-boot-dependency's pom on github,百里香叶属性是:
<thymeleaf.version>2.1.5.RELEASE</thymeleaf.version> <thymeleaf-extras-springsecurity4.version>2.1.2.RELEASE</thymeleaf-extras-springsecurity4.version> <thymeleaf-extras-conditionalcomments.version>2.1.2.RELEASE</thymeleaf-extras-conditionalcomments.version> <thymeleaf-layout-dialect.version>1.4.0</thymeleaf-layout-dialect.version> <thymeleaf-extras-data-attribute.version>1.3</thymeleaf-extras-data-attribute.version> <thymeleaf-extras-java8time.version>2.1.0.RELEASE</thymeleaf-extras-java8time.version>
我相信你至少需要定义以下属性(可能需要更多一些以避免版本不匹配?):