Java 9 Runtime Exception вызывает org.glassfish.jersey.server.ResourceConfig

Мое приложение прекрасно работает с java 1.8 (и более ранними версиями), однако когда я перестроил приложение для использования java 9, я получил следующую трассировку стека. Причина обновления в том, что мне нужно использовать новый ProcessHandle.current(), которого нет в более ранних версиях.

c:\>java -jar ./build/bin/DataMover.jar
DataMover Service: starting...
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoClassDefFoundError: org/glassfish/jersey/server/ResourceConfig
        at dataMoverServerPackage.Main.main(Unknown Source)
        ... 5 more
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.server.ResourceConfig
        at java.base/java.net.URLClassLoader.findClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 6 more

Для тех, кому интересно, вот вывод версии Java.

c:\>java -version
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

Вот соответствующая функция main().

public static void main(String[] args)
{
try
{
    ...
    final ResourceConfig resourceConfig = new ResourceConfig(DataMoverServerResource.class);

Я провел исследование и прочитал, что большая разница между Java 6,7,8 и Java 9 заключается в модулях. В частности, более ранние версии Java включали Java EE JDK, тогда как Java 9 включает в себя модуль java.se, а не EE. Как я читал, все классы com.sun.* Недоступны в Java 9. Эти фрагменты информации могут иметь или не иметь отношение к делу. Я не знаю внутреннюю структуру API jersey.server, только некоторые статьи говорили об этом.

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

приложение, показывающее джерси

Я разрываюсь между внутренней проблемой зависимости от Джерси или фляги трикотажа. Загрузчик кажется счастливым, но не работает позже java.base/jdk.internal, который говорит мне, что модуль может отсутствовать.

Если бы был внутренний модуль, такой как java.xml.bind, как я читал в одном посте, который включен в Java EE, то трассировка исключений указала бы на это, и я бы знал, что добавить этот модуль, используя --add-module вариант Java, такой как --add-module java.xml.bind, но это не тот случай, по крайней мере, с этим модулем.

Вот ссылка на одну, возможно, соответствующую статью. Может быть java.net это проблема, так же, как at javax.xml.bind в нижней части стека трассировки в этом вопросе была основная причина. Я сбрасывал со счетов ext Папка ответит на этот вопрос, так как этот вопрос относится к 1.8, что у меня работает, и у меня есть jar-in-jar. Я отмечаю вопрос здесь, потому что он продолжает появляться в поисках. Этот вопрос тоже не актуален, хотя и похож. Список можно продолжить.

Я использую Eclipse, но собираю, используя ant. Библиотеки вещей из Джерси находятся в моей папке Maven .m2. Я щелкнул правой кнопкой мыши по своему проекту и выбрал Maven > Обновить. Это на 2,7.

репозиторий maven, показывающий джерси-сервер

Я наткнулся на этот сайт, который рассказывает о миграции на Java 9. На сайте я прочитал, что если вы добавите java.se.ee, у вас будет доступ ко всем модулям Java EE. Эта рекомендация не удалась, тот же результат. Команда, которую я попробовал, была:

java --add-modules java.se.ee -jar ./build/bin/DataMover.jar

Я проверил SO и довольно много других сайтов, но пока пусто. Мысли?

0 ответов

Другие вопросы по тегам