micronaut-projects / micronaut-projects/micronaut-openapi
Micronaut ksp access to invalid KotlingAwalsAccessibleLifetimeToken
- Dominant language
- Java
- Stars
- 114
- Forks
- 121
- Avg merge
- 2d 17h
- Merged PRs (30d)
- 25
Description
### Expected Behavior
Compile a project migrated from micronaut 4 to 5
### Actual Behaviour
I'm tring to migrate a project from micronaut 4 to 5. Ksp version 1 is no longer availble we must use ksp version 2 and there is a problem micronaut plugins, that prevents the project compilation:
`
Access to invalid ksp.org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinAlwaysAccessibleLifetimeToken@e62cd44: PSI has changed since creation
ksp.org.jetbrains.kotlin.analysis.api.lifetime.KaInvalidLifetimeOwnerAccessException: Access to invalid ksp.org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinAlwaysAccessibleLifetimeToken@e62cd44: PSI has changed since creation
at ksp.org.jetbrains.kotlin.analysis.api.fir.symbols.KaFirFileSymbol.getPsi(KaFirFileSymbol.kt:65)
at com.google.devtools.ksp.impl.symbol.kotlin.KSFileImpl.getPsi(KSFileImpl.kt:45)
at com.google.devtools.ksp.impl.symbol.kotlin.KSFileImpl.filePath_delegate$lambda$0(KSFileImpl.kt:59)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:86)
at com.google.devtools.ksp.impl.symbol.kotlin.KSFileImpl.getFilePath(KSFileImpl.kt:58)
at ksp.com.google.devtools.ksp.common.impl.CodeGeneratorImpl.associate(CodeGeneratorImpl.kt:200)
at ksp.com.google.devtools.ksp.common.impl.CodeGeneratorImpl.createNewFile(CodeGeneratorImpl.kt:171)
at ksp.com.google.devtools.ksp.common.impl.CodeGeneratorImpl.createNewFile(CodeGeneratorImpl.kt:69)
at io.micronaut.kotlin.processing.visitor.KotlinVisitorContext$KspGeneratedFile.(KotlinVisitorContext.kt:305)
at io.micronaut.kotlin.processing.KotlinOutputVisitor.visitMetaInfFile(KotlinOutputVisitor.kt:55)
at io.micronaut.kotlin.processing.visitor.KotlinVisitorContext.visitMetaInfFile(KotlinVisitorContext.kt:194)
at io.micronaut.openapi.visitor.ContextUtils.visitMetaInfFile(ContextUtils.java:160)
at io.micronaut.openapi.visitor.FileUtils.getDefaultFilePath(FileUtils.java:120)
at io.micronaut.openapi.visitor.FileUtils.openApiSpecFile(FileUtils.java:138)
at io.micronaut.openapi.visitor.OpenApiApplicationVisitor.writeYamlToFile(OpenApiApplicationVisitor.java:983)
at io.micronaut.openapi.visitor.OpenApiApplicationVisitor.finish(OpenApiApplicationVisitor.java:619)
at io.micronaut.kotlin.processing.visitor.TypeElementSymbolProcessor.finish(TypeElementSymbolProcessor.kt:179)
at com.google.devtools.ksp.impl.KotlinSymbolProcessing.execute(KotlinSymbolProcessing.kt:617)
at com.google.devtools.ksp.impl.KSPLoader$Companion.loadAndRunKSP(KSPLoader.kt:37)
at com.google.devtools.ksp.impl.KSPLoader.loadAndRunKSP(KSPLoader.kt)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at com.google.devtools.ksp.gradle.KspAAWorkerAction.execute(KspAATask.kt:750)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:191)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$500(DefaultConditionalExecutionQueue.java:112)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:168)
at org.gradle.internal.Factories$1.create(Factories.java:30)
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$runAndReleaseLocks$0(DefaultWorkerLeaseService.java:300)
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:43)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAndReleaseLocks(DefaultWorkerLeaseService.java:298)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:294)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:286)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:130)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:135)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:163)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:125)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
[ksp] Error:
Access to invalid ksp.org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinAlwaysAccessibleLifetimeToken@e62cd44: PSI has changed since creation
ksp.org.jetbrains.kotlin.analysis.api.lifetime.KaInvalidLifetimeOwnerAccessException: Access to invalid ksp.org.jetbrains.kotlin.analysis.api.platform.lifetime.KotlinAlwaysAccessibleLifetimeToken@e62cd44: PSI has changed since creation
at ksp.org.jetbrains.kotlin.analysis.api.fir.symbols.KaFirFileSymbol.getPsi(KaFirFileSymbol.kt:65)
at com.google.devtools.ksp.impl.symbol.kotlin.KSFileImpl.getPsi(KSFileImpl.kt:45)
at com.google.devtools.ksp.impl.symbol.kotlin.KSFileImpl.filePath_delegate$lambda$0(KSFileImpl.kt:59)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:86)
at com.google.devtools.ksp.impl.symbol.kotlin.KSFileImpl.getFilePath(KSFileImpl.kt:58)
at ksp.com.google.devtools.ksp.common.impl.CodeGeneratorImpl.associate(CodeGeneratorImpl.kt:200)
at ksp.com.google.devtools.ksp.common.impl.CodeGeneratorImpl.createNewFile(CodeGeneratorImpl.kt:171)
at ksp.com.google.devtools.ksp.common.impl.CodeGeneratorImpl.createNewFile(CodeGeneratorImpl.kt:69)
at io.micronaut.kotlin.processing.visitor.KotlinVisitorContext$KspGeneratedFile.(KotlinVisitorContext.kt:305)
at io.micronaut.kotlin.processing.KotlinOutputVisitor.visitMetaInfFile(KotlinOutputVisitor.kt:55)
at io.micronaut.kotlin.processing.visitor.KotlinVisitorContext.visitMetaInfFile(KotlinVisitorContext.kt:194)
at io.micronaut.openapi.visitor.ContextUtils.visitMetaInfFile(ContextUtils.java:160)
at io.micronaut.openapi.visitor.FileUtils.getDefaultFilePath(FileUtils.java:120)
at io.micronaut.openapi.visitor.FileUtils.openApiSpecFile(FileUtils.java:138)
at io.micronaut.openapi.visitor.OpenApiApplicationVisitor.writeYamlToFile(OpenApiApplicationVisitor.java:983)
at io.micronaut.openapi.visitor.OpenApiApplicationVisitor.finish(OpenApiApplicationVisitor.java:619)
at io.micronaut.kotlin.processing.visitor.TypeElementSymbolProcessor.finish(TypeElementSymbolProcessor.kt:179)
at com.google.devtools.ksp.impl.KotlinSymbolProcessing.execute(KotlinSymbolProcessing.kt:617)
at com.google.devtools.ksp.impl.KSPLoader$Companion.loadAndRunKSP(KSPLoader.kt:37)
at com.google.devtools.ksp.impl.KSPLoader.loadAndRunKSP(KSPLoader.kt)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at com.google.devtools.ksp.gradle.KspAAWorkerAction.execute(KspAATask.kt:750)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58)
at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:174)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:191)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$500(DefaultConditionalExecutionQueue.java:112)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:168)
at org.gradle.internal.Factories$1.create(Factories.java:30)
at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$runAndReleaseLocks$0(DefaultWorkerLeaseService.java:300)
at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:43)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAndReleaseLocks(DefaultWorkerLeaseService.java:298)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocksAcquired(DefaultWorkerLeaseService.java:294)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:286)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:130)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:135)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:163)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:125)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:545)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:328)
at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1090)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:614)
at java.base/java.lang.Thread.run(Thread.java:1474)
`
I found a related issue here https://github.com/micronaut-projects/micronaut-core/issues/11928
### Steps To Reproduce
This is my build.gradle.kts config:
`
import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import org.jooq.codegen.GenerationTool
import org.jooq.meta.jaxb.*
import org.jooq.meta.jaxb.Configuration
import org.jooq.meta.jaxb.Target
import org.testcontainers.containers.YugabyteDBYSQLContainer
import org.testcontainers.utility.DockerImageName
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath(libs.postgresql)
classpath(libs.yugabytedb)
classpath("org.testcontainers:yugabytedb:1.21.4")
classpath("org.testcontainers:testcontainers:2.0.5")
classpath(libs.jooqCodeGen)
classpath(libs.liquibaseCore)
}
}
plugins {
idea
id("org.jetbrains.kotlin.jvm") version "2.3.21"
id("org.jetbrains.kotlin.plugin.allopen") version "2.3.21"
id("com.google.devtools.ksp") version "2.3.7"
id("com.gradleup.shadow") version "9.4.1"
id("io.micronaut.application") version "5.0.2"
id("io.micronaut.test-resources") version "5.0.2"
id("io.micronaut.aot") version "5.0.2"
id("org.jetbrains.kotlinx.kover") version libs.versions.kover.get()
alias(libs.plugins.liquibase)
}
idea {
module {
isDownloadSources = true
isDownloadJavadoc = true
}
}
version = libs.versions.app.version.get()
group = "com.kugelbit.mercado"
val kotlinVersion = project.properties.get("kotlinVersion")
repositories {
mavenCentral()
}
dependencies {
ksp("io.micronaut.data:micronaut-data-processor")
ksp("io.micronaut:micronaut-http-validation")
ksp("io.micronaut.openapi:micronaut-openapi")
ksp("io.micronaut.security:micronaut-security-processor")
ksp("io.micronaut.serde:micronaut-serde-processor")
// ksp("io.micronaut.validation:micronaut-validation-processor")
implementation("io.micronaut:micronaut-http-client")
implementation("io.micronaut:micronaut-management")
implementation("io.micronaut.data:micronaut-data-jdbc")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("io.micronaut.liquibase:micronaut-liquibase")
implementation("org.locationtech.jts:jts-core:1.20.0")
implementation("io.micronaut.multitenancy:micronaut-multitenancy")
implementation("io.micronaut.kafka:micronaut-kafka")
implementation("io.micronaut:micronaut-aop")
implementation(libs.ociCore)
implementation(libs.ociObjectStore)
implementation(libs.ociHttpClient)
implementation("io.micronaut.problem:micronaut-problem-json")
implementation("io.micronaut.security:micronaut-security")
implementation("io.micronaut.security:micronaut-security-jwt")
implementation("io.micronaut.security:micronaut-security-csrf")
implementation("io.micronaut.serde:micronaut-serde-jackson")
implementation("io.micronaut.sql:micronaut-jdbc-hikari")
implementation("io.micronaut.sql:micronaut-jooq")
// implementation("io.micronaut.validation:micronaut-validation")
implementation("io.micronaut.beanvalidation:micronaut-hibernate-validator")
developmentOnly("io.micronaut.controlpanel:micronaut-control-panel-ui")
developmentOnly("io.micronaut.controlpanel:micronaut-control-panel-management")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
implementation("org.slf4j:jul-to-slf4j")
compileOnly("io.micronaut.openapi:micronaut-openapi-annotations")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("tools.jackson.module:jackson-module-kotlin")
implementation(libs.postgresql)
implementation(libs.yugabytedb)
implementation("net.postgis:postgis-jdbc:2024.1.0")
// runtimeOnly("org.postgresql:r2dbc-postgresql")
// implementation("io.micronaut.data:micronaut-data-r2dbc")
runtimeOnly("org.yaml:snakeyaml")
testImplementation("org.assertj:assertj-core")
aotPlugins(platform("io.micronaut.platform:micronaut-platform:5.0.4"))
aotPlugins("io.micronaut.security:micronaut-security-aot")
testImplementation("io.micronaut.test:micronaut-test-kotest5")
testImplementation(libs.kotest)
testImplementation("io.micronaut.test:micronaut-test-rest-assured")
testImplementation("com.lemonappdev:konsist:0.17.3")
implementation(libs.jooq)
implementation(libs.jooqJacksonExtensions)
implementation(libs.htmlUnit)
implementation("io.micronaut.redis:micronaut-redis-lettuce")
implementation("io.micronaut.cache:micronaut-cache-core")
liquibaseRuntime(libs.liquibaseCore)
liquibaseRuntime("org.apache.commons:commons-lang3:3.14.0")
liquibaseRuntime(libs.postgresql)
liquibaseRuntime(libs.yugabytedb)
liquibaseRuntime(libs.jaxbApi)
liquibaseRuntime(libs.picocli)
implementation(libs.flyingSaucePDF)
implementation("io.micronaut.views:micronaut-views-pebble")
implementation("com.vonage:server-sdk:8.20.1")
implementation("net.logstash.logback:logstash-logback-encoder:8.1")
implementation("org.codehaus.janino:janino:3.1.9")
implementation("com.google.cloud:google-cloud-recaptchaenterprise:3.77.0")
}
application {
mainClass = "com.kugelbit.mercado.ApplicationKt"
}
java {
sourceCompatibility = JavaVersion.toVersion("25")
targetCompatibility = JavaVersion.toVersion("25")
}
java.toolchain {
languageVersion.set(JavaLanguageVersion.of(25))
}
kotlin.jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(25))
}
sourceSets {
main {
kotlin.srcDir("build/generated-src/sources/jooq")
}
}
graalvmNative {
toolchainDetection = false
agent {
tasksToInstrumentPredicate.set { task ->
!task.group.equals("liquibase", ignoreCase = true)
}
}
}
micronaut {
runtime("netty")
testRuntime("kotest5")
testResources {
version = "4.0.0"
}
processing {
incremental(true)
annotations("com.kugelbit.mercado.*")
}
aot {
// Please review carefully the optimizations enabled below
// Check https://micronaut-projects.github.io/micronaut-aot/latest/guide/ for more details
optimizeServiceLoading = false
convertYamlToJava = false
precomputeOperations = true
cacheEnvironment = true
optimizeClassLoading = true
deduceEnvironment = true
optimizeNetty = true
replaceLogbackXml = true
configurationProperties.put("micronaut.security.jwks.enabled", "false")
// configurationProperties.put("micronaut.security.openid-configuration.enabled", "false")
}
}
kover {
reports {
filters {
excludes {
// excludes class by fully-qualified JVM class name, wildcards '*' and '?' are available
classes("*Step", "*Test", "*Stub")
files("com/kugelbit/mercado/MercadoApplication.kt")
packages(
"com.kugelbit.mercado.test", "com.kugelbit.mercado.testUtils",
"com.kugelbit.mercado.bdd", "com.kugelbit.mercado.infrastructure.database.testdata",
"com.kugelbit.mercado.infrastructure.database.jooqGen"
)
}
}
}
}
var postgreSQLContainer: YugabyteDBYSQLContainer? = null
tasks.register("startPostgresqlContainer") {
group = "database"
doLast {
postgreSQLContainer = YugabyteDBYSQLContainer(
DockerImageName.parse("yugabytedb/yugabyte:2025.1.0.1-b3").asCompatibleSubstituteFor("yugabytedb"))
postgreSQLContainer?.withDatabaseName("mercado")
postgreSQLContainer?.withUsername("mercado")
postgreSQLContainer?.apply { start() }
}
}
tasks.register("stopPostgresqlContainer") {
group = "database"
doLast {
postgreSQLContainer?.stop()
}
}
tasks.register("jooqCodegen") {
group = "jooq"
dependsOn("startPostgresqlContainer", "update")
finalizedBy("stopPostgresqlContainer")
doLast {
Configuration()
.withJdbc(
Jdbc()
.withDriver("com.yugabyte.Driver")
.withUrl(postgreSQLContainer?.jdbcUrl)
.withUser(postgreSQLContainer?.username)
.withPassword(postgreSQLContainer?.password)
)
.withGenerator(
Generator()
.withName("org.jooq.codegen.KotlinGenerator")
.withDatabase(
Database()
.withInputSchema("public")
.withRecordVersionFields("")
.withRecordTimestampFields("")
.withExcludes(
"""
spatial_ref_sys
| databasechangelog
| databasechangeloglock
""".trimIndent()
)
.withForcedTypes(
ForcedType().apply {
userType = "com.kugelbit.mercado.domain.system_parameter.ParameterValue"
withJsonConverter(true)
includeExpression = "system_parameter\\.value"
}
)
)
.withGenerate(
Generate()
.withRecords(true)
.withDeprecated(false)
.withDeprecationOnUnknownTypes(false)
.withImmutablePojos(true)
.withFluentSetters(true)
)
.withTarget(
Target()
.withPackageName("com.kugelbit.mercado.infrastructure.database.jooqGen")
.withDirectory("${layout.projectDirectory}/build/generated-src/sources/jooq")
)
).also(GenerationTool::generate)
}
outputs.dir("${layout.projectDirectory}/build/generated-src/sources/jooq")
}
liquibase {
activities.register("main") {
arguments = mapOf(
"logLevel" to "info",
"changelogFile" to "db/liquibase-changelog.xml",
"searchPath" to "${project.projectDir}/src/main/resources",
"classpath" to "${project.projectDir}/src/main/resources",
"username" to postgreSQLContainer?.username,
"password" to postgreSQLContainer?.password,
"url" to postgreSQLContainer?.jdbcUrl,
"driver" to postgreSQLContainer?.driverClassName,
)
}
activities.register("integTest") {
arguments = mapOf(
"logLevel" to "info",
"changelogFile" to "db/liquibase-changelog.xml",
"searchPath" to "${project.projectDir}/src/main/resources",
"classpath" to "${project.projectDir}/src/main/resources",
"username" to postgreSQLContainer?.username,
"password" to postgreSQLContainer?.password,
"url" to postgreSQLContainer?.jdbcUrl,
"driver" to postgreSQLContainer?.driverClassName,
)
}
runList = project.properties.get("runList") as String? ?: "main"
}
tasks.register("dropIntegTestDatabase") {
group = "liquibaseIT"
finalizedBy("dropAll")
doFirst {
project.logger.lifecycle("Running Liquibase dropAll command...")
liquibase.runList = "integTest"
}
}
tasks.register("updateIntegTestDatabase") {
group = "liquibaseIT"
dependsOn("startPostgresqlContainer")
finalizedBy("update")
doFirst {
project.logger.lifecycle("Running Liquibase update command...")
liquibase.runList = "integTest"
}
}
tasks.named("dockerfileNative") {
jdkVersion = "21"
}
val registryUrl = System.getenv("IMAGE_REGISTRY_URL") ?: "sa-vinhedo-1.ocir.io/axxyree8lpxd/kugelbit"
val registryImage = System.getenv("IMAGE_NAME") ?: "mercado-api"
val customDockerImage: String = System.getenv("IMAGE") ?: ""
tasks.named("dockerBuild") {
dependsOn("deleteDockerBuildCacheImage")
images = mutableListOf(
"${registryUrl}/${registryImage}:${project.version}",
"${registryUrl}/${registryImage}"
)
if(customDockerImage.isNotBlank()) {
images.add(customDockerImage)
}
}
tasks.register("deleteDockerBuildCacheImage") {
delete(fileTree("build/.docker"))
}
tasks.named("dockerBuildNative") {
dependsOn("deleteDockerBuildCacheImage")
images = mutableListOf(
"${registryUrl}/${registryImage}-native:${project.version}",
"${registryUrl}/${registryImage}-native",
)
if(customDockerImage.isNotBlank()) {
images.add("${customDockerImage}-native")
}
}
tasks.named("compileKotlin") {
mustRunAfter("jooqCodegen")
}
tasks.named("compileJava") {
mustRunAfter("jooqCodegen")
}
tasks.withType().configureEach {
useClassDataSharing.set(false)
}
tasks.named("dockerfile") {
baseImage = "eclipse-temurin:25-jre"
}
tasks.withType().configureEach {
failOnNoDiscoveredTests = false
}
`
### Environment Information
Windows
JDK 25
### Example Application
_No response_
### Version
5.0.4
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with KotlinVisitorContext.kt:305 and KotlinOutputVisitor.kt:55, then trace the OpenApiApplicationVisitor calls shown in the stack trace. Reproduce the failure while compiling a project migrated from Micronaut 4 to 5 with KSP 2. Done means compilation completes without the invalid lifetime exception and the OpenAPI file is generated.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- kotlin
- Domain
- api, documentation
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 45/100