jlink:ed 应用程序中的记录引发异常
Records in jlink:ed application throws exception
在 jlink:ed 应用程序中使用记录(预览功能 java-14),在使用选项时出现以下错误:
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
java.lang.ClassFormatError: Invalid constant pool index 11 for name in Record attribute in class file
myproj/MyClass$MyRecord
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
删除选项 --strip-debug
options = ['--compress', '2', '--no-header-files', '--no-man-pages']
我可以用一个简单的 "hello world" module
重现这个问题,它使用 record
功能和 JDK-14。
另一方面,使用 JDK-15 构建(从源代码库构建),它工作正常。
我建议您尝试使用 JDK-15,它具有支持 record
s 的更新版本的 ASM (ASM 8.0.1
)。那应该可以解决您的问题。这是与 ASM (ASM 8.0.1
) 更新相关的错误报告:JDK-8241627。在我们开发 JDK 14 时,此版本的 ASM 不可用。我从未见过将 ASM 反向移植到以前的 JDK 版本,并且考虑到 record
s 是一个预览功能...
假设最终目标是减小自定义 Java 运行时映像的大小,JDK14 上的一个选项(仅 Linux)是只删除本机调试符号(胖子确实是!)并通过使用 —-strip-native-debug-symbols
.
保留 Java 调试属性(以避免当前的 ASM 问题)
有关详细信息,请参阅 https://delabassee.com/StrippingDebug-Jlink/。
在 jlink:ed 应用程序中使用记录(预览功能 java-14),在使用选项时出现以下错误:
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
java.lang.ClassFormatError: Invalid constant pool index 11 for name in Record attribute in class file
myproj/MyClass$MyRecord
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
删除选项 --strip-debug
options = ['--compress', '2', '--no-header-files', '--no-man-pages']
我可以用一个简单的 "hello world" module
重现这个问题,它使用 record
功能和 JDK-14。
另一方面,使用 JDK-15 构建(从源代码库构建),它工作正常。
我建议您尝试使用 JDK-15,它具有支持 record
s 的更新版本的 ASM (ASM 8.0.1
)。那应该可以解决您的问题。这是与 ASM (ASM 8.0.1
) 更新相关的错误报告:JDK-8241627。在我们开发 JDK 14 时,此版本的 ASM 不可用。我从未见过将 ASM 反向移植到以前的 JDK 版本,并且考虑到 record
s 是一个预览功能...
假设最终目标是减小自定义 Java 运行时映像的大小,JDK14 上的一个选项(仅 Linux)是只删除本机调试符号(胖子确实是!)并通过使用 —-strip-native-debug-symbols
.
有关详细信息,请参阅 https://delabassee.com/StrippingDebug-Jlink/。