随机无法识别Maven依赖

时间:2016-10-13 14:56:25

标签: java maven spring-boot intellij-idea dependencies

我正在使用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文件 - &gt; Maven - &gt;再进口。这将重新导入我的所有依赖项,一切都将恢复正常。

我还想强调,每次运行应用程序时都不会发生这种情况。有时它会连续发生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);
    }
}

要运行应用程序,我右键单击此文件,然后单击运行“应用程序”按钮。

1 个答案:

答案 0 :(得分:0)

Spring boot已经包含了thymeleaf(一个不同的版本),你可能在类路径上有多个版本。 Spring Boot在其文档中非常清楚百里香的情况:

Spring boot 1.4.2's documentation使用百里香叶3.0.0

  

默认情况下,spring-boot-starter-thymeleaf使用Thymeleaf 2.1。如果你   正在使用spring-boot-starter-parent,你可以使用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>

小结

我相信您至少需要定义以下属性(可能需要更多一些以避免版本不匹配?):

  • thymeleaf.version
  • thymeleaf-额外-springsecurity4.version