Собственный образ GraalVM (Substrate VM — Darwin) с совместимостью Java SE

#java #graalvm #graalvm-native-image #substratevm

#java #graalvm #graalvm-native-image #substratevm

Вопрос:

SubstrateVM позволяет компилировать JAVA-приложение в собственный исполняемый файл macOS (Darwin). Я не могу найти ни одного места, документирующего, какие пакеты Java (SE) реализованы SubstrateVM. Это самая большая проблема, с которой я сталкиваюсь, когда собираюсь решить, какие библиотеки Java я могу использовать, когда хочу скомпилировать свое приложение в собственный исполняемый файл macOS (iOS), потому что некоторые библиотеки Java с открытым исходным кодом / сторонних производителей могут использовать определенные пакеты Java (sun или Java Swing), которые могут отсутствовать в SubtracteVM. Раньше я использовал аналогичный AOT, такой как robovm, я знаю, что там не реализовано множество пакетов Java.

Пока что полезным ограничением, которое я могу найти, является это одно. Но в нем по-прежнему не упоминается, в какой части Java SE он реализован (или нет). Кто-нибудь может указать, где я могу найти эту информацию?

Ответ №1:

Я думаю, что вы ищетеLIMITATIONS.md файл SubstrateVM. Здесь перечислены все функции Java, которые SubstrateVM не поддерживает или для которых требуется дополнительная настройка. Наиболее заметно это включает динамическую загрузку классов, отражение и JNI (обычно все три можно обойти с помощью дополнительной настройки) или менеджеров сериализации и безопасности.

Лучший, христианский

Комментарии:

1. Да, это тот, на который я поместил гиперссылку в своем вопросе. Я прочитал все это заранее, на самом деле в нем не упоминается, какие пакеты Java он поддерживает в собственной среде выполнения. В любом случае, все равно спасибо, что поделились.

2. Извините, я пропустил ссылку в вашем первоначальном вопросе. Тем не менее, SubstrateVM поддерживает все пакеты / классы приложений с учетом вышеупомянутых ограничений. Из того, что я вижу, проблемы обычно возникают из-за пользовательских приложений (использующих динамическую загрузку классов, использующих отражение и т.д.), А не из основных классов JDK.

3. Раньше я сталкивался с ошибкой, связанной со сторонней библиотекой Java, поскольку она использует класс «java.swing. TreeNode » (все еще отслеживает эту проблему в службе поддержки). Я предполагаю, что SubstractVM поставляется с собственной реализацией основных классов JDK, и он не реализует полный объем Java SDK. Вот почему это может вызвать некоторые проблемы с совместимостью, когда мы используем какую-нибудь тяжеловесную стороннюю библиотеку.