У меня есть приложение на основе Eclipse, которое переносится с Java 8 на Java 11. Поскольку javax.xml
и друзья были удалены из JDK, мне пришлось добавить его в качестве Import-Package для каждого подключаемого модуля, который нуждался в них.
Теперь, однако, при запуске этого кода
Marshaller marshaller = JAXBContext.newInstance(MyClass.class).createMarshaller();
я получаю следующее исключение:
java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.eclipse.osgi.internal.framework.ContextFinder.loadClass(ContextFinder.java:135)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:480)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:184)
Я могу добавить com.sun.xml.bind
, который должен иметь зависимость, но ничего не происходит.Это понятно, так как правила OSGi предотвращают взлом другого плагина с помощью рефлексии.
Однако я не могу добавить Require-Bundle или Import-Package в JDK или в пакет вокруг javax.xml.bind
.
Существует ошибка , связанная с этой проблемой, но я не могу найти хорошее решение для своего приложения в комментариях.Тем не менее, я предполагаю, что это может быть исправлено для приложения Eclipse, иначе само Eclipse не должно работать на Java 11.
Как мне исправить это исключение?