I'm trying to convert my springBoot API from JIT compilation to AOT compilation with GraalVM.
To do this, I'm building a docker image with buildtools :
gradle plugin :
id("org.graalvm.buildtools.native") version "0.9.27"
build command : gradle bootBuildImage
run cmd : docker run --rm -p 8080:8080 myproject:0.0.1-SNAPSHOT
error during API startup :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in com.myproject.managers.UserManager required a bean of type 'com.myproject.domain.repository.user.UserRepository' that could not be found.
It seems that the UserRepository Bean Definition doesn't exist, GraalVM can't find the UserRepository Bean.
This is my UserRepository and My UserManager (kotlin) :
@Repository
interface UserRepository: LdapRepository<User> {
fun findByUserId(uuid: String): Optional<User>
fun findByMobile(mobile: String): Optional<User>
fun findByMail(mail: String): Optional<User>
}
@Component
class UserManager(
private val userRepository: UserRepository
) {
...
}
Do you know how I can make my Ldap Spring Data Repository compatible with AOT ?
PS
this is a part of my build.gradle.kts (I can change the versions if necessary) :
plugins {
id("org.springframework.boot") version "3.1.0"
id("io.spring.dependency-management") version "1.1.0"
kotlin("jvm") version "1.8.21"
kotlin("plugin.spring") version "1.8.21"
kotlin("plugin.noarg") version "1.8.21"
kotlin("kapt") version "1.8.22"
id("org.graalvm.buildtools.native") version "0.9.27"
}
val springVersion = "3.1.4"
val ktlVersion = "1.8.21"
val springLdapVersion = "3.1.4"
dependencies {
// kotlin
implementation(kotlin("stdlib", ktlVersion))
implementation(kotlin("reflect", ktlVersion))
testImplementation(kotlin("test", ktlVersion))
// spring
implementation("org.springframework.boot:spring-boot-starter-web:$springVersion")
testImplementation("org.springframework.boot:spring-boot-starter-test:$springVersion")
// ldap
implementation("org.springframework.boot:spring-boot-starter-data-ldap:$springLdapVersion")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "17"
}
}