创建名称为 '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
}
}
我可以构建应用程序(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
}
}