demo3038-auth_captcha 使用 GraalVM native image 打包后运行报错:Exception in thread "main" java.lang.IllegalStateException: java.util.zip.ZipException: zip END header not found
Opened this issue · 1 comments
Camio1945 commented
复现步骤
1. 通过 mvn package 把 demo3038-auth_captcha 项目打包 jar 包,并重命名为 demo.jar
2. 在 Rocky Linux 9 上运行 jar 包,并通过 agentlib 收集信息
2.1. 我的 Java 版本:
java --version 130 ↵
java 21.0.4 2024-07-16 LTS
Java(TM) SE Runtime Environment Oracle GraalVM 21.0.4+8.1 (build 21.0.4+8-LTS-jvmci-23.1-b41)
Java HotSpot(TM) 64-Bit Server VM Oracle GraalVM 21.0.4+8.1 (build 21.0.4+8-LTS-jvmci-23.1-b41, mixed mode, sharing)
2.2. 执行 jar 命令并收集信息:
java -agentlib:native-image-agent=config-merge-dir=/home/camio/demo-config/,config-write-period-secs=5,config-write-initial-delay-secs=1 -jar demo.jar
2.3. 访问浏览器,试用各种验证码,成功收集到了 GraalVM 需要的相关信息:
╰─➤ ll /home/camio/demo-config
total 52K
drwxr-xr-x 2 camio camio 6 Aug 18 16:03 agent-extracted-predefined-classes
drwx------ 2 camio camio 180 Aug 18 16:04 agent-pid36461-20240818T080457Z.tmp14407388045284041076
-rw-r--r-- 1 camio camio 702 Aug 18 16:04 jni-config.json
-rw-r--r-- 1 camio camio 65 Aug 18 16:04 predefined-classes-config.json
-rw-r--r-- 1 camio camio 4 Aug 18 16:04 proxy-config.json
-rw-r--r-- 1 camio camio 28K Aug 18 16:04 reflect-config.json
-rw-r--r-- 1 camio camio 4.9K Aug 18 16:04 resource-config.json
-rw-r--r-- 1 camio camio 71 Aug 18 16:04 serialization-config.json
3. 把 jar 包编译成二进制包
native-image --enable-url-protocols=http,https -H:ConfigurationFileDirectories=/home/camio/demo-config -jar demo.jar demo
4. 运行二进制包,报错
报错信息:
╰─➤ /home/camio/demo
Exception in thread "main" java.lang.IllegalStateException: java.util.zip.ZipException: zip END header not found
at org.noear.solon.loader.ExecutableArchiveLauncher.<init>(ExecutableArchiveLauncher.java:57)
at org.noear.solon.loader.JarLauncher.<init>(JarLauncher.java:42)
at org.noear.solon.loader.JarLauncher.main(JarLauncher.java:65)
at java.base@21.0.4/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: java.util.zip.ZipException: zip END header not found
at java.base@21.0.4/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1649)
at java.base@21.0.4/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1657)
at java.base@21.0.4/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1495)
at java.base@21.0.4/java.util.zip.ZipFile$Source.get(ZipFile.java:1458)
at java.base@21.0.4/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
at java.base@21.0.4/java.util.zip.ZipFile.<init>(ZipFile.java:251)
at java.base@21.0.4/java.util.zip.ZipFile.<init>(ZipFile.java:180)
at java.base@21.0.4/java.util.jar.JarFile.<init>(JarFile.java:345)
at java.base@21.0.4/java.util.jar.JarFile.<init>(JarFile.java:316)
at java.base@21.0.4/java.util.jar.JarFile.<init>(JarFile.java:282)
at org.noear.solon.loader.jar.AbstractJarFile.<init>(AbstractJarFile.java:39)
at org.noear.solon.loader.jar.JarFile.<init>(JarFile.java:136)
at org.noear.solon.loader.jar.JarFile.<init>(JarFile.java:131)
at org.noear.solon.loader.jar.JarFile.<init>(JarFile.java:116)
at org.noear.solon.loader.jar.JarFile.<init>(JarFile.java:106)
at org.noear.solon.loader.archive.JarFileArchive.<init>(JarFileArchive.java:69)
at org.noear.solon.loader.archive.JarFileArchive.<init>(JarFileArchive.java:65)
at org.noear.solon.loader.Launcher.createArchive(Launcher.java:136)
at org.noear.solon.loader.ExecutableArchiveLauncher.<init>(ExecutableArchiveLauncher.java:53)
... 3 more
5. 求助:能否帮忙针对 demo3038-auth_captcha 这个例子给出一个可以通过 GraalVM native image 在 Linux 上成功打包并运行的方案?
noear commented
并非所有示例,都支持原生编译的(细节方面得研究,需要自己添加外部框架的原生编译配置)。
下面这个是原生编译的示例:
https://github.com/opensolon/solon-native-example