使用GraalVM Native Gradle Plugin执行nativeCompile任务失败
问题解决:Kotlin项目GraalVM原生镜像构建失败(kotlin.DeprecationLevel初始化问题)
问题核心
项目可通过./gradlew clean build正常构建,但执行./gradlew nativeCompile生成原生镜像时失败,关键错误提示:
Error: Classes that should be initialized at run time got initialized during image building:
kotlin.DeprecationLevel was unintentionally initialized at build time.
解决方案
1. 强制指定类运行时初始化
在graalvmNative的main二进制配置中添加参数,让kotlin.DeprecationLevel仅在程序运行时初始化:
buildArgs.add("--initialize-at-run-time=kotlin.DeprecationLevel")
2. 对齐Kotlin插件版本
当前Kotlin序列化插件版本(2.0.0)与Kotlin核心版本(1.9.23)不兼容,降级序列化插件版本匹配核心版本:
kotlin("plugin.serialization") version "1.9.23"
3. 优化反射配置(可选)
若序列化时需要完整反射支持,补充reflection.json的字段和方法声明:
[ { "name": "com.sample.domain.Customer", "unsafeAllocated": true, "fields": [ {"name": "name"}, {"name": "email"}, {"name": "customerId"} ], "methods": [ {"name": "<init>", "parameterTypes": ["java.lang.String", "java.lang.String", "java.lang.Integer"]} ] } ]
4. 升级GraalVM Native插件(可选)
将插件升级到最新稳定版,修复已知兼容性问题:
id("org.graalvm.buildtools.native") version "0.10.4"
修改后的完整build.gradle.kts
plugins { kotlin("jvm") version "1.9.23" id("org.graalvm.buildtools.native") version "0.10.4" kotlin("plugin.serialization") version "1.9.23" } group = "com.sample" version = "1.0-SNAPSHOT" graalvmNative { toolchainDetection.set(true) binaries { named("main") { imageName.set("sample-cli") mainClass.set("com.sample.ApplicationKt") buildArgs.add("--enable-http") buildArgs.add("--enable-url-protocols=https") buildArgs.add("--report-unsupported-elements-at-runtime") buildArgs.add("--no-fallback") buildArgs.add("-H:ReflectionConfigurationFiles=${rootProject.projectDir}/src/main/resources/reflection.json") buildArgs.add("-H:+UnlockExperimentalVMOptions") // 添加运行时初始化配置 buildArgs.add("--initialize-at-run-time=kotlin.DeprecationLevel") } named("test") { buildArgs.add("-O0") } } binaries.all { resources.autodetect() } } repositories { mavenCentral() } dependencies { implementation("org.slf4j:slf4j-simple:2.0.13") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.1") testImplementation(kotlin("test")) } tasks.test { useJUnitPlatform() } kotlin { jvmToolchain(21) }
验证步骤
- 清理缓存:
./gradlew clean - 重新构建原生镜像:
./gradlew nativeCompile - 运行生成的可执行文件:
./build/native/nativeCompile/sample-cli
内容的提问来源于stack exchange,提问作者PacificNW_Lover
相关产品推荐
相关产品推荐

