Записи в jlink: приложение ed выдает исключение - PullRequest
5 голосов
/ 29 апреля 2020

Использование записей (функция предварительного просмотра java -14) в приложении jlink: ed, выдает ошибку ниже при использовании опций:

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)

Ответы [ 4 ]

6 голосов
/ 29 апреля 2020

Я могу воспроизвести эту проблему с помощью простого "hello world" module, который использует функцию record вместе с JDK-14.

С другой стороны, в сборке JDK-15 (построенной из репозитория исходных кодов) он просто отлично работает.

5 голосов
/ 29 апреля 2020

Я предлагаю вам попробовать JDK-15 с обновленной версией ASM (ASM 8.0.1), поддерживающей record s. Это должно исправить вашу проблему.

3 голосов
/ 29 апреля 2020

Удалить опцию --strip-debug

options = ['--compress', '2', '--no-header-files', '--no-man-pages']
2 голосов
/ 30 апреля 2020

Предполагая, что конечной целью является уменьшение размера пользовательского Java образа времени выполнения, опция в JDK14 (только Linux) состоит в том, чтобы удалять только собственные символы отладки (там, где на самом деле жир!) И сохранять Java атрибуты отладки (чтобы избежать текущей проблемы ASM) с помощью —-strip-native-debug-symbols.

См. https://delabassee.com/StrippingDebug-Jlink/ для некоторых деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...