Классы ресурсов Джерси не экспортируются - PullRequest
1 голос
/ 15 февраля 2011

Я использую встроенную Jetty с Джерси для формирования REST API.

Когда я экспортирую из Eclipse с помощью мастера Runnable JAR, если я выбираю «Упаковать необходимые библиотеки в сгенерированный JAR», когда я запускаюJAR, я получаю ошибку

The ResourceConfig instance does not contain any root resource classes

Если я выберу «Извлечь необходимые библиотеки в сгенерированный JAR», я не получу сообщение об ошибке, и все классы ресурсов будут обнаружены.

Я не могуиспользовать метод извлечения для производства из-за проблем с лицензированием.

Кто-нибудь получил какие-либо исправления или обходные пути?

1 Ответ

0 голосов
/ 07 июля 2016

Предварительные условия: пожалуйста, проверьте имя пакета в web.xml и имя вашего пакета, где ресурс существует в коде. Если оба одинаковы, следуйте решениям:

Решение 1: При экспорте файла jar установите флажок «Добавить записи каталога» (Eclipse) или filesonly = «false» (Ant). Это добавит записи каталога, чтобы при обращении кода джерси к классу ресурсов он был виден ему.

Решение 2: Вы также можете указать имена классов. Указание только имени пакета не сработало, но когда я указал, как показано ниже, оно сработало для меня.

<servlet>
    <servlet-name>##SERVLETNAME##</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>##PACKAGENAME##</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>             
        <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value>
     </init-param>
     <init-param>
      <param-name>com.sun.jersey.config.property.classnames</param-name> 
      <param-value>
        ##CLASSNAME1##,##CLASSNAME2##
      </param-value> 
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>##SERVLETNAME##</servlet-name>
    <url-pattern>/##SERVLETURL##/*</url-pattern>
</servlet-mapping>
...