You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)
}

验证步骤

  1. 清理缓存:./gradlew clean
  2. 重新构建原生镜像:./gradlew nativeCompile
  3. 运行生成的可执行文件:./build/native/nativeCompile/sample-cli

内容的提问来源于stack exchange,提问作者PacificNW_Lover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:35:16