Среда:
- Версия GraalVM: 21.0.5 (GraalVM CE 21.0.5 для Java 21)
- Версия Java: Java 21
- Версия Spring Boot: 3.3.5
- Версия EclipseStore: 2.0.0
- Операционная система: Sonoma 14.6.1
Когда я запускаю собственный образ своего приложения, я получаю следующую ошибку:
Код: Выделить всё
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field final java.util.Map java.util.Collections$SetFromMap.m accessible: module java.base does not "opens java.util" to unnamed module @60a7e509
at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:391)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:367)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:183)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:177)
at org.eclipse.serializer.reflect.XReflect.setAccessible(XReflect.java:110)
...
Что Я пробовал:
- Добавление --add-opens во время сборки:
В моем pom.xml я включил следующие аргументы сборки:Код: Выделить всё
--add-opens=java.base/java.util=ALL-UNNAMED
- Добавление --add-opens во время выполнения:[/b]
Обновлены аргументы сборки, чтобы передать параметр --add-opens в среду выполнения:Код: Выделить всё
-H:AdditionalRuntimeOptions=--add-opens=java.base/java.util=ALL-UNNAMED
- Регистрация подсказок по отражению:
В моем RuntimeHints.java< /code>, я зарегистрировал внутренний класс:Код: Выделить всё
hints.reflection().registerType( TypeReference.of("java.util.Collections$SetFromMap"), builder -> builder.withMembers(MemberCategory.values()) );
- Использование файла конфигурации отражения:
Создан рефлекс-конфигурация .json с необходимой конфигурацией.
Дополнительная информация:
- Репозиторий GitHub: LiveNathan/ eclipseStoreTest
- Связанное обсуждение: Обсуждение Eclipse Store на GitHub № 297
Код: Выделить всё
org.graalvm.buildtools
native-maven-plugin
0.10.3
eclipse-store-test
true
true
META-INF/native-image
-H:AdditionalRuntimeOptions=--add-opens=java.base/java.util=ALL-UNNAMED
Код: Выделить всё
RuntimeHints.java
Код: Выделить всё
public class RuntimeHints implements RuntimeHintsRegistrar {
@Override
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
hints.reflection().registerType(
TypeReference.of("java.util.Collections$SetFromMap"),
builder -> builder.withMembers(MemberCategory.values())
);
// Other registrations...
}
}
- Есть ли способ правильно настроить GraalVM и система модулей Java, обеспечивающая рефлексивный доступ к java.util.Collections$SetFromMap?
- Может ли эта проблема быть связана с несовместимостью между EclipseStore и Java 21 или GraalVM 21.0.5?
- Существуют ли альтернативные подходы к устранению этой ошибки без использования внутренних классов JDK?
Примечание. Я просмотрел подобные вопросы и документацию, но не нашел работающего решения. Если кто-то сталкивался с подобной проблемой или знает, как ее решить, ваша помощь будет неоценима.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -java-util