java - Jersey 资源类未导出

标签 java eclipse jar jetty jersey

我使用嵌入式 Jetty 和 Jersey 来形成 REST API。

当我使用 Runnable JAR 向导从 Eclipse 导出时,如果我选择“将所需的库打包到生成的 JAR 中”,则当我运行 JAR 时,会收到错误

The ResourceConfig instance does not contain any root resource classes

如果我选择“将所需的库提取到生成的 JAR 中”,则不会出现错误,并且会检测到所有资源类。

由于许可问题,我无法使用 Extract 方法进行生产。

有人有任何修复或解决方法吗?

最佳答案

先决条件:请验证 web.xml 中的包名称以及代码中资源所在的包名称。如果两者相同,则按照解决方案进行操作:

解决方案1: 导出 jar 时,请选中“添加目录条目”复选框 (Eclipse) 或 filesonly="false"(Ant)。这将添加目录条目,以便当 Jersey 代码访问资源类时它对其可见。

解决方案 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>

关于java - Jersey 资源类未导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007534/

相关文章:

java - 在 Eclipse 中隐藏注释的任何方法

eclipse - Buckminster: headless (headless)运行 JUnit 插件测试

java - 将多个实体(自定义对象)设置为 httpRequest

java.lang.IllegalArgumentException : Invalid format: "2018-08-24T��:��:��" is malformed at "��:��:��"

java - 构建和验证 Gigya 签名

java - 在SWT按钮上,如何将文本放置在图像前面

java - 在java中递归设置777权限而不使用NIO

java - jar 文件无法正常工作?

java - 如何为 esri Geometry-api 构建 jar 文件

java - 在 GAE 中部署时包含 appengine-api-1.0-sdk.jar