I am creating my first micronaut gradle multimode application
Project structure
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)
}
}
}
}
main build.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)
}
}
application build.gradle.kts
plugins {
id("io.micronaut.library") version "4.0.4"
}
./gradlew build
run successful
./gradlew run
the application started successfully
curl http://localhost:8080/hello
Running the curl I got the following error
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
I am not able to instantiate the UseCase bean
repository -> https://github.com/jupemo/finance
I am trying yo run the application successfully to better understand micronaut build in gradle
The problem was that the ksp plugin was not well-defined.
Without the ksp plugin, it was not possible to do the annotations processing and for that reason, the program was not reaching the bean
repository ksp plugin https://github.com/google/ksp
Working gradle
root 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)
}
}
}
}
main gradle
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)
}
}
application gradle:
plugins {
id("io.micronaut.library")
}
version = "0.1"
group = "com.jupemo.finance"