【问题标题】:Error creating bean with name 'configurationPropertiesBeans' defined in class path resource /ConfigurationPropertiesRebinderAutoConfiguration.class]在类路径资源 /ConfigurationPropertiesRebinderAutoConfiguration.class 中创建名称为“configurationPropertiesBeans”的 bean 时出错]
【发布时间】:2021-11-15 01:58:15
【问题描述】:

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

我也尝试了 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 Cloud openfeign 2.x与boot 2.4/2.5不兼容
  • @spencergibb 谢谢。请问,生产中的每个最新版本都兼容吗?
  • 您打算使用 Spring Boot 2.3.4 还是 2.4.7?您的依赖项列表中都有这两个。
  • 见 start.spring.io
  • @BjørnVester,谢谢,只要它们兼容,我打算使用 Spring Cloud 和 Spring Boot 的最新版本。我将用 2.4.7 替换 2.3.4

标签: spring kotlin gradle spring-cloud spring-initializr


【解决方案1】:

你为你的spring cloud依赖声明的版本(2.2.9.RELEASE)与spring boot 2.4不兼容。您至少需要 3.0.0 请参阅https://spring.io/projects/spring-cloud 上的表格——特别是点击指向 Spring Cloud 2020 版本的链接,因为这对应于 Spring Boot 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 boot 版本,并且你正在使用依赖管理插件,你应该让它拉入它想要的版本——你不应该在你的依赖中声明 $springVersion,你不需要 gradle.properties 中的 springVersion 变量。依赖管理将引入正确的版本,这已经为您的 webflux 依赖完成。这部分是您的问题的第二个最可能的原因。

如果您完全确定您声明的版本相互兼容,请确保不会意外拉入较旧版本的云。

./gradlew dependencies --configuration compileClasspath

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

如果您能够找出引入旧版本的罪魁祸首,则可以防止旧版本被传递引入。在下面的 sn-p 中,我省略了 logger,因为我更喜欢 log4j2,但你可以替换旧包,如果你用新版本声明相同的包,它将是首选

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 2021-11-06
    • 2020-03-25
    相关资源
    最近更新 更多