Micronaut 多模块项目 - 实例化 [XXX] 类型的 bean 时出错

问题描述 投票:0回答:1

我正在创建我的第一个 micronaut gradle 多模式应用程序

项目结构

Root project 'finance'
+--- Project ':application'
\--- Project ':main'

root build.gradle.kts

plugins {
    id("org.jetbrains.kotlin.jvm") version "1.8.22"
    id("org.jetbrains.kotlin.plugin.allopen") version "1.8.22"

}

version = "0.1"
group = "com.jupemo.finance"

repositories {
    mavenCentral()
}

subprojects {

    apply(plugin = "org.jetbrains.kotlin.jvm")
    apply(plugin = "org.jetbrains.kotlin.plugin.allopen")


    repositories {
        mavenCentral()
    }


    java {
        sourceCompatibility = JavaVersion.toVersion("17")
    }

    dependencies {
        runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
        runtimeOnly("org.yaml:snakeyaml")

        compileOnly("org.projectlombok:lombok:1.18.30")
        annotationProcessor("org.projectlombok:lombok:1.18.30")
    }


    tasks {
        compileKotlin {
            compilerOptions {
                jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
            }
        }
        compileTestKotlin {
            compilerOptions {
                jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
            }
        }
    }

}

主要构建.gradle.kts

plugins {
    id("com.google.devtools.ksp") version "1.8.22-1.0.11"
    id("com.github.johnrengelman.shadow") version "8.1.1"
    id("io.micronaut.application") version "4.0.4"
    id("io.micronaut.aot") version "4.0.4"
}




val kotlinVersion=project.properties.get("kotlinVersion")

dependencies {
    ksp("io.micronaut.serde:micronaut-serde-processor")
    implementation("io.micronaut.serde:micronaut-serde-jackson")
    implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
    runtimeOnly("ch.qos.logback:logback-classic")

    implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
    ksp("io.micronaut:micronaut-http-validation") // move to rest
    compileOnly("io.micronaut:micronaut-http-client") // move to rest
    testImplementation("io.micronaut:micronaut-http-client") // move to rest
    implementation("io.micronaut:micronaut-management")

    implementation(project(":application"))

}

application {
    mainClass.set("com.jupemo.finance.ApplicationKt")
}


graalvmNative.toolchainDetection.set(false)
micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("com.jupemo.*")
    }
    aot {
    // Please review carefully the optimizations enabled below
    // Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details
        optimizeServiceLoading.set(false)
        convertYamlToJava.set(false)
        precomputeOperations.set(true)
        cacheEnvironment.set(true)
        optimizeClassLoading.set(true)
        deduceEnvironment.set(true)
        optimizeNetty.set(true)
    }
}

应用程序build.gradle.kts

plugins {
    id("io.micronaut.library") version "4.0.4"
}
./gradlew build

运行成功

./gradlew run

申请成功启动

curl http://localhost:8080/hello

运行curl时出现以下错误

Message: com.jupemo.finance.controller.FinanceController
Path Taken: new FinanceController(UseCase useCase)
io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [com.jupemo.finance.controller.FinanceController]

Message: com.jupemo.finance.controller.FinanceController
Path Taken: new FinanceController(UseCase useCase)
        at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2322)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2277)
        at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2289)
        at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3056)
        at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:81)
        at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistratio
...
Caused by: java.lang.InstantiationError: com.jupemo.finance.controller.FinanceController
        at com.jupemo.finance.controller.$FinanceController$Definition.instantiate(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2307)
        ... 80 common frames omitted

我无法实例化 UseCase bean

存储库 -> https://github.com/jupemo/finance

我正在尝试成功运行应用程序,以更好地理解 gradle 中的 micronaut 构建

kotlin gradle micronaut multi-module
1个回答
0
投票

问题在于 ksp 插件没有明确定义。

如果没有 ksp 插件,则无法进行注释处理,因此程序无法到达 bean

存储库 ksp 插件 https://github.com/google/ksp

工作梯度

根gradle:

plugins {
    id("org.jetbrains.kotlin.jvm")
    id("org.jetbrains.kotlin.plugin.allopen")
    id("com.google.devtools.ksp")
}

repositories {
    mavenCentral()
}

subprojects {
    repositories {
        mavenCentral()
    }

    apply(plugin = "org.jetbrains.kotlin.jvm")
    apply(plugin = "org.jetbrains.kotlin.plugin.allopen")
    apply(plugin = "com.google.devtools.ksp")

    java {
        sourceCompatibility = JavaVersion.toVersion("17")
    }

    tasks {
        compileKotlin {
            compilerOptions {
                jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
            }
        }
        compileTestKotlin {
            compilerOptions {
                jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
            }
        }
    }
}

主要梯度

    plugins {
    id("com.github.johnrengelman.shadow")
    id("io.micronaut.application")
    id("io.micronaut.aot")
}

version = "0.1"
group = "com.jupemo.finance"

val kotlinVersion=project.properties.get("kotlinVersion")

dependencies {
    ksp("io.micronaut:micronaut-http-validation")
    ksp("io.micronaut.serde:micronaut-serde-processor")
    implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
    implementation("io.micronaut.serde:micronaut-serde-jackson")
    implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
    compileOnly("io.micronaut:micronaut-http-client")
    runtimeOnly("ch.qos.logback:logback-classic")
    runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
    testImplementation("io.micronaut:micronaut-http-client")
    runtimeOnly("org.yaml:snakeyaml")
    annotationProcessor("io.micronaut:micronaut-inject-java")

    implementation(project(":application"))
}


application {
    mainClass.set("com.jupemo.finance.ApplicationKt")
}

graalvmNative.toolchainDetection.set(false)
micronaut {
    runtime("netty")
    testRuntime("junit5")
    processing {
        incremental(true)
        annotations("com.jupemo.finance.*")
    }
    aot {
    // Please review carefully the optimizations enabled below
    // Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details
        optimizeServiceLoading.set(false)
        convertYamlToJava.set(false)
        precomputeOperations.set(true)
        cacheEnvironment.set(true)
        optimizeClassLoading.set(true)
        deduceEnvironment.set(true)
        optimizeNetty.set(true)
    }
}

应用等级:

plugins {
    id("io.micronaut.library")
}

version = "0.1"
group = "com.jupemo.finance"
© www.soinside.com 2019 - 2024. All rights reserved.