簡體   English   中英

從 Java11 遷移到 Java17 后,GraalVM 本機映像構建“nativeCompile”任務在 Gradle 上失敗

[英]GraalVM native image build `nativeCompile` task fails on Gradle after migrating from Java11 to Java17

綜上所述,將 Gradle 屬性(源/目標)和原生 GraalVM 鏡像從 Java11 遷移到 Java17 后,構建任務在 Gradle 失敗。

這是一個 micronaut Java 服務,在不泄露任何專有代碼庫細節的情況下,我分享了我的 Gradle output 失敗的“nativeCompile”任務的以下部分:

[1/7] Initializing...                                                                                    (8.0s @ 0.36GB)
 Version info: 'GraalVM 22.3.1 Java 17 CE'
 Java version info: '17.0.6+10-jvmci-22.3-b13'
 C compiler: gcc (redhat, aarch64, 8.5.0)
 Garbage collector: Serial GC
 6 user-specific feature(s)
 - com.oracle.svm.thirdparty.gson.GsonFeature
 - io.micronaut.buffer.netty.NettyFeature
 - io.micronaut.configuration.kafka.graal.ChecksumFeature
 - io.micronaut.grpc.server.graalvm.HttpNettyFeature
 - io.micronaut.http.netty.graal.HttpNettyFeature
 - io.micronaut.jackson.JacksonDatabindFeature

Fatal error: ------------------------------------------------------------------------------------------------------------------------
                        0.5s (5.9% of total time) in 12 GCs | Peak RSS: 1.26GB | CPU load: 2.25
========================================================================================================================
java.lang.IllegalAccessError: class io.micronaut.grpc.server.graalvm.HttpNettyFeature (in unnamed module @0x128ca7af) cannot access class com.oracle.svm.core.jdk.SystemPropertiesSupport (in module org.graalvm.nativeimage.builder) because module org.graalvm.nativeimage.builder does not export com.oracle.svm.core.jdk to unnamed module @0x128ca7af
        at io.micronaut.grpc.server.graalvm.HttpNettyFeature.beforeAnalysis(HttpNettyFeature.java:84)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$9(NativeImageGenerator.java:736)
Failed generating 'application' after 8.2s.
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:85)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:736)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:578)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:535)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:580)
        at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:128)
Error: Image build request failed with exit status 1

> Task :nativeCompile FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':nativeCompile'.
> Process 'command '/opt/graalvm-ce-java17-22.3.1/bin/native-image'' finished with non-zero exit value 1

我沒有使用 GraalVM 的經驗(這是遺留問題,我在這樣創建的容器內運行nativeCompile

docker run -it --entrypoint /bin/bash \
 --mount type=bind,source=<path to service source code>,target=/app \
 --mount type=bind,source=<path to home>.gradle,target=/root/.gradle \
 ghcr.io/graalvm/graalvm-ce:ol8-java17-22.3.1

在這個容器上,env 詳細信息如下:

bash-4.4# ./gradlew --version

------------------------------------------------------------
Gradle 7.6
------------------------------------------------------------

Build time:   2022-11-25 13:35:10 UTC
Revision:     daece9dbc5b79370cc8e4fd6fe4b2cd400e150a8

Kotlin:       1.7.10
Groovy:       3.0.13
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.6 (GraalVM Community 17.0.6+10-jvmci-22.3-b13)
OS:           Linux 5.15.49-linuxkit aarch64

我不知道在這里追求什么,想知道是否有過時的本機依賴項。 我知道我還沒有發布我的build.gradle螺母,希望到目前為止有人可以給我一些指示。

修復。 似乎 GraalVM 發布的更新必須與舊的次要版本同步使用。 我想這是保持本機類兼容的一種方法。

就我而言,較舊的本機映像 gradle 和代碼庫設置使用的是 ol8-java11-22.1.0,我將其全部更新為最新可用的 ol8-java17-23.2.1。 這打破了構建。

但是,GraalVM 還發布了 ol8-java17-22.1.0,它與舊的次要版本相匹配。 這沒有任何問題,構建成功。

我直接使用native-image命令構建原生鏡像,而不是通過 gradle 插件。 我在將 graalvm 從22.1.0升級到22.3.2時遇到了這個問題。 將參數-J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED添加到 native-image 命令修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM