【问题标题】:jersey - ClassNotFoundException org.glassfish.jersey.servlet.ServletContainerjersey - ClassNotFoundException org.glassfish.jersey.servlet.ServletContainer
【发布时间】:2018-05-18 21:47:51
【问题描述】:

当我将带有 jersey 的 rest api 部署到 tomcat 7.0 服务器时,我收到一个错误,该错误已在 stackoverflow 上经常讨论,但我无法解决它:

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:495)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:477)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:113)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1133)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1072)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5362)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5660)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1700)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1690)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我检查过的东西:

避免重复的球衣版本

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>${jersey2.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>
<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.1</version>
</dependency>

所以,ServletContainer 肯定是导入的

然而,我注意到在依赖层次结构中,jersey servlet 容器也是通过另一个库 (dropwizard-core -&gt; dropwizard-jersey -&gt; jersey-container-servlet: 2.16) 导入的,并且版本不同(我的版本是 2.25.1)。但它说omitted for conflict with 2.25.1

Apache Tomcat v7.0 包库在哪里

我的项目最初是一个纯 Maven 项目,后来我添加了 Dynamic Web Project 方面。当我与成功测试 jersey rest api 的测试项目进行比较时,我在构建路径上看不到 Apache Tomcat v7.0 库。在我的测试项目中,我看到了

WebContent/WEB-INF/lib 为空

正如this question 中提到的,球衣库应该部署到我的WEB-INF/lib/ 文件夹中。我做了Project -&gt; Deployment Assembly -&gt; Add -&gt; Java Build Path Entries -&gt; Maven Dependencies -&gt; Finish。但是一旦我执行Project -&gt; Maven -&gt; Update,上面的步骤就会被重置(即我在Web Deployment Assembly 中看不到Maven Dependencies。尽管这很奇怪,但在成功的测试球衣项目中lib 文件夹也是空的.

编辑

有一些更根本的问题。在成功的jersey rest api中,我得到了子文件夹结构

  • 目标
    +---- 生成源
    +---- JerseyRestDemo-0.0.1-SNAPSHOT
    +---- m2e-wtp
    +--------- 网络资源
    +----------------- META-INF
    +------------------------maven
    +---- maven-archiver
    +--------- pom.properties
    +---- 测试类
  • 网页内容
    +---- META-INF
    +--------- 清单.MF
    +---- WEB-INF
    +--------- 库
    +----------web.xml

但是,在我当前的项目中,我只是看到

  • 目标
    +----- 生成源
    +--------- 注释
    +----- Maven 状态
    +--------- maven-compiler-plugin
    +--------------- 编译
  • 网页内容
    +---- META-INF
    +--------- 清单.MF
    +---- WEB-INF
    +--------- 库
    +----------web.xml

感谢您的帮助

【问题讨论】:

    标签: java rest maven tomcat servlets


    【解决方案1】:

    我在 this post 之后再次将项目从 maven 转换为 webapp,然后它工作了

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多