当我没有使用该注释或任何与 MVC 相关的依赖项时,Spring 会抱怨 @EnableWebMvc

Posted

技术标签:

【中文标题】当我没有使用该注释或任何与 MVC 相关的依赖项时,Spring 会抱怨 @EnableWebMvc【英文标题】:Spring complains @EnableWebMvc when I haven't used that annotation nor any dependency related to MVC 【发布时间】:2019-11-21 21:40:30 【问题描述】:

我正在开发一个反应式 Spring Boot api 服务器。我最初想使用 MVC 模式,但我认为反应器是个好主意。

所以我已经删除了所有 Spring 对 MVC 的依赖(我相信)。

但是 spring 一直抱怨我不能使用 @EnableWebMvc@EnableWebFlux

以下是我的错误日志

Caused by: java.lang.IllegalStateException: The Java/XML config for Spring MVC and Spring WebFlux cannot both be enabled, e.g. via @EnableWebMvc and @EnableWebFlux, in the same application.

可能是什么问题?我确实更新了我的依赖项。

以下是我的 build.gradle.kts 文件

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript 
    repositories 
        mavenCentral()
    

    dependencies 
        "classpath"(group = "gradle.plugin.com.palantir.gradle.docker", name = "gradle-docker")
    


plugins 
    kotlin("plugin.jpa") version "1.3.40"
    id("org.springframework.boot") version "2.1.6.RELEASE"
    id("io.spring.dependency-management") version "1.0.7.RELEASE"
    id("com.palantir.docker") version "0.22.1"
    kotlin("jvm") version "1.3.40"
    kotlin("plugin.spring") version "1.3.40"


group = "com.mycompany"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

val developmentOnly by configurations.creating
configurations 
    runtimeClasspath 
        extendsFrom(developmentOnly)
    


repositories 
    mavenCentral()
    maven(url = "https://repo.spring.io/snapshot")
    maven(url = "https://repo.spring.io/milestone")


extra["springCloudVersion"] = "Greenwich.SR1"

dependencies 
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-batch")
    implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    //reactor
    implementation("io.projectreactor:reactor-core")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("org.springframework.data:spring-data-jdbc:1.0.0.r2dbc-SNAPSHOT")
    implementation("org.springframework.data:spring-data-r2dbc:1.0.0.M1")
    implementation("io.r2dbc:r2dbc-spi:1.0.0.M5")
    implementation("io.r2dbc:r2dbc-postgresql:1.0.0.M6")

    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("org.postgresql:postgresql")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("io.projectreactor:reactor-test")
    testImplementation("org.springframework.batch:spring-batch-test")

    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    testImplementation("org.springframework.boot:spring-boot-starter-test") 
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
        exclude(group = "junit", module = "junit")
    


dependencyManagement 
    imports 
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:$property("springCloudVersion")")
        mavenBom("io.projectreactor:reactor-bom:Bismuth-RELEASE")
    


tasks.withType<KotlinCompile> 
    kotlinOptions 
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    



task<Copy>("unpack") 
    dependsOn(tasks.getByName("bootJar"))
    from(zipTree(tasks.getByName("bootJar").outputs.files.singleFile))
    into("build/dependency")


【问题讨论】:

【参考方案1】:

我通过删除我拥有的每个依赖项来解决这个问题。

问题是

implementation("org.springframework.boot:spring-boot-starter-web")

删除后,它起作用了。也许上面的依赖对 WebMvc 有自己的依赖,但我不确定。

【讨论】:

以上是关于当我没有使用该注释或任何与 MVC 相关的依赖项时,Spring 会抱怨 @EnableWebMvc的主要内容,如果未能解决你的问题,请参考以下文章

导入任何依赖项时无法使用其他文件中的接口

Django 中的两个与搜索相关的错误:当没有搜索项时:“reduce() of empty sequence with no initial value”。在任何搜索词上:没有结果

使用 Node 8.9.4 LTS 安装 Sails.js 依赖项时,NPM“ENOENT:没有此类文件或目录错误”

Composer 在更新依赖项时挂起

什么是 Android kapt 及其用法?添加依赖项时,Gradle 中的注解处理器和 kapt 有什么区别?

除了 MVC,iOS 上还使用了哪些设计模式?