我正在使用嵌入式Jetty和Jersey来组成REST API。
当我使用Runnable JAR向导从Eclipse导出时,如果我选择“将所需的库打包到生成的JAR中”,那么当我运行JAR时,我会收到错误
The ResourceConfig instance does not contain any root resource classes
如果我选择“将所需库提取到生成的JAR中”,则不会收到任何错误,并且会检测到所有资源类。
由于许可问题,我无法使用Extract方法进行生产。
任何人都有任何修复或解决方法吗?
答案 0 :(得分:0)
先决条件:请验证web.xml中的软件包名称以及代码中资源所在的软件包名称。如果两者相同,请遵循以下解决方案:
解决方案1: 在导出jar时,请检查"添加目录条目"复选框(Eclipse)或filesonly =" false" (蚂蚁)。这将添加目录条目,以便当泽西代码访问资源类时,它对它是可见的。
解决方案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>