在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)发布于 2020-04-30 16:50:14
假设最终目标是减小自定义Java运行时映像的大小,那么JDK14 (仅限Linux)上的一个选项是只删除本机调试符号( fat实际上是这样的!)并使用—-strip-native-debug-symbols保留Java debug属性(以避免当前的ASM问题)。
有关详细信息,请参阅https://delabassee.com/StrippingDebug-Jlink/。
发布于 2020-04-30 00:52:04
我建议你尝试使用JDK-15,它有一个更新版本的ASM (ASM 8.0.1),支持records,这应该可以解决你的问题。这是与对ASM (ASM 8.0.1):JDK-8241627的更新相关的错误报告。当我们开发JDK14时,这个版本的ASM还不可用。我从来没有看到过ASM的后端口到以前的JDK版本,并且考虑到record是一个预览功能……
发布于 2020-04-30 00:51:55
我可以用一个简单的"hello world“module重现这个问题,它使用了record特性和JDK-14。
另一方面,对于JDK-15构建(从源代码库构建),它工作得很好。
https://stackoverflow.com/questions/61504956
复制相似问题