Сбой сборки собственного образа GraalVM с использованием EclipseStore: невозможно получить доступ к java.util.CollectionJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сбой сборки собственного образа GraalVM с использованием EclipseStore: невозможно получить доступ к java.util.Collection

Сообщение Anonymous »

Я пытаюсь создать собственный образ своего приложения Spring Boot с помощью GraalVM, но сталкиваюсь с исключением InaccessibleObjectException, связанным с java.util.Collections$SetFromMap. Я попробовал несколько решений, но проблема не устранена.
Среда:
  • Версия 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
Описание проблемы:< /p>
Когда я запускаю собственный образ своего приложения, я получаю следующую ошибку:

Код: Выделить всё

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)
...
Это говорит о том, что приложение пытается получить доступ к внутренним классам посредством отражения, которое блокируется системой модулей Java.
Что Я пробовал:
  • Добавление --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 с необходимой конфигурацией.
Несмотря на эти попытки, ошибка остается прежней.< /p>
Дополнительная информация:
  • Репозиторий GitHub: LiveNathan/ eclipseStoreTest
  • Связанное обсуждение: Обсуждение Eclipse Store на GitHub № 297
Соответствующий фрагмент pom.xml:

Код: Выделить всё



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
:[/b]

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»