创建名称为 'configurationPropertiesBeans' 的 bean 在 class 路径资源 /ConfigurationPropertiesRebinderAutoConfiguration.class] 中定义时出错

Error creating bean with name 'configurationPropertiesBeans' defined in class path resource /ConfigurationPropertiesRebinderAutoConfiguration.class]

我可以构建应用程序(Kotlin+Spring+Spring Cloud)但我无法启动它。 根据我搜索的内容,它与 Spring 依赖项之间的不兼容有关。我发现有人面临与我类似的问题,但在应用其解决方案后,我不断遇到同样的问题

我也尝试了 Spring Initializr 建议的技巧,但是当我输入 spring-cloud-starter

时我什么也没得到

我想当我为以下项目设置正确的版本后问题就会解决:

id("org.springframework.boot") version "2.4.7"
id("io.spring.dependency-management") version "1.0.10.RELEASE"


implementation("org.springframework.boot:spring-boot-dependencies:${springVersion}")
implementation("org.springframework.boot:spring-boot-starter:${springVersion}")
implementation("org.springframework.boot:spring-boot-starter-web:${springVersion}")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE")
implementation("io.github.openfeign:feign-okhttp:10.2.0")

这是我的 gradle.build.kts

    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
    
    plugins {
        id("org.jetbrains.kotlin.jvm") version "1.4.10"
        id("org.jetbrains.kotlin.kapt") version "1.4.10"
        kotlin("plugin.spring") version "1.5.20"
        id("org.springframework.boot") version "2.4.7"
    
        id("io.spring.dependency-management") version "1.0.10.RELEASE"
    
    }
    
    val kotlinVersion: String by project
    val springVersion: String by project
    val projectGroupId: String by project
    val projectVersion: String by project
    val jacocoVersion: String by project
    
    group = projectGroupId
    version = projectVersion
    
    repositories {
        mavenLocal()
...
        mavenCentral()
    }
    
    // add dependencies
    dependencies {
        kapt(kotlin("stdlib", kotlinVersion))
        implementation(kotlin("stdlib-jdk8"))
        implementation(kotlin("reflect", kotlinVersion))
    
        compile("br.com.mycomp:lib-log:3.2.0-74")
    
        implementation("org.springframework.boot:spring-boot-dependencies:${springVersion}")
        implementation("org.springframework.boot:spring-boot-starter:${springVersion}")
        implementation("org.springframework.boot:spring-boot-starter-web:${springVersion}")
        implementation("org.springframework.boot:spring-boot-starter-webflux")
        implementation("org.springframework.cloud:spring-cloud-starter-openfeign:2.2.9.RELEASE")
        implementation("io.github.openfeign:feign-okhttp:10.2.0")
    
    
        implementation("org.jetbrains.kotlin:kotlin-reflect")
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    
    
        implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.11.2")
    
    
    }
    
    java {
        sourceCompatibility = JavaVersion.toVersion("11")
    }
    
    tasks {
        compileKotlin {
            kotlinOptions {
                jvmTarget = "11"
                javaParameters = true
            }
        }
    
        compileTestKotlin {
            kotlinOptions {
                jvmTarget = "11"
                javaParameters = true
            }
        }
    
    }
    
    springBoot {
        mainClass.set("com.examplo.demo.DemoApplication.kt")
    }
    
    sourceSets {
        main {
            java {
                srcDirs("build/generated/source/avro/main/java")
            }
        }
    }
    
    apply {
    
        tasks.test {
            useJUnitPlatform()
        }
    
        configurations {
            all {
                exclude(group = "junit", module = "junit")
                exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
                exclude(group = "org.slf4j", module = "slf4j-log4j12")
            }
        }
    
        tasks {
            compileKotlin {
                kotlinOptions {
                    jvmTarget = "11"
                    javaParameters = true
                }
            }
    
        }
    }
    
    val compileKotlin: KotlinCompile by tasks
    compileKotlin.kotlinOptions {
        jvmTarget = "1.8"
    }
    val compileTestKotlin: KotlinCompile by tasks
    compileTestKotlin.kotlinOptions {
        jvmTarget = "1.8"
    }

及其gradle.properties

springVersion=2.3.4.RELEASE
kotlinVersion=1.4.10
projectGroupId=com.mycomp
projectVersion=0.0.1
jacocoVersion=0.8.7
artifactoryContextUrl=xxx

您为 spring 云依赖项 (2.2.9.RELEASE) 声明的版本与 spring boot 2.4 不兼容。您至少需要 3.0.0 请参阅 https://spring.io/projects/spring-cloud 上的 table——特别是遵循 link 到 spring 云 2020 版本,因为它对应于 spring启动 2.4。我认为这可能是您遇到问题的原因,但我还有一些其他建议可以帮助保持同步。

我看到 kotlin 版本 1.4.10 但 spring.kotlin 版本 1.5.20,它们通常彼此保持同步,所以最好至少使用两者相同的主要版本(在这种情况下, 1.5.x) 即在您的 gradle.properties 中将 kotlin 版本更新为 1.5.x,然后在 build.gradle 中使用

plugins {
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    id("org.springframework.boot") version "2.5.4"
    kotlin("jvm") version "1.5.30"
    kotlin("kapt") version "1.5.30"
    kotlin("plugin.spring") version "1.5.30"
}

另请注意更新的 spring 依赖管理版本。由于您已经声明了 spring 启动版本,并且您正在使用依赖管理插件,因此您应该让它引入它想要的版本——您不应该声明 $springVersion在您的依赖项上,并且您不需要 gradle.properties 中的 springVersion 变量。依赖管理将引入正确的版本,这已经为您的 webflux 依赖完成了。这部分是导致问题的第二大可能原因。

如果您绝对确定您声明的版本彼此兼容,请确保不会意外引入旧版本的云。

./gradlew dependencies --configuration compileClasspath

./gradlew -q dependencyInsight --dependency spring-cloud-starter-openfeign --configuration compileClasspath

如果您能够梳理出引入旧版本的罪魁祸首,则可以防止旧版本被传递引入。在下面的代码片段中,我省略了 logger,因为我更喜欢 log4j2,但您可以替换旧包,如果您用较新版本声明相同的包,则首选

configurations {
    all {
        exclude(group = "org.springframework.boot", module = "spring-boot-starter-logging") // Prefer log4j2
    }
}