簡體   English   中英

java.lang.ClassNotFoundException:org.glassfish.jersey.servlet.ServletContainer

[英]java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

您可能會覺得這是一個重復的問題,但沒有一個同名的問題可以解決我的問題。 我使用Jersey 2.0在Eclipse中創建RESTful Web服務,我使用Tomcat 7.0作為我的服務器,我有以下web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.shop.domain</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/jaxrs/*</url-pattern>
  </servlet-mapping>
</web-app>

我有一個名為Hello的簡單類:

@Path("customers")
public class Hello {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getCustomer() {
        return "hello";
    }
}

我有一個名為jersey的澤西島圖書館:

在此輸入圖像描述

每次我運行這個項目,我都會得到錯誤

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

有任何想法嗎?

我想這已經得到了回答,但只是想補充一點。

對於Eclipse中的Web項目,幾乎總是建議使用Maven管理依賴項。 使用像m2e這樣的Maven插件。 向Maven項目添加依賴項后,它應自動將這些庫部署到WEB-INF / lib 如果沒有(無論出於何種原因),您可以明確地這樣做:

  1. Project Explorer中右鍵單擊您的項目
  2. 選擇屬性
  3. 選擇部署程序集
  4. 如果Maven Dependencies不是其中一個條目,則不會自動添加庫,因此我們現在將添加它們
  5. 選擇添加
  6. 選擇Java Build Path Entries
  7. 選擇Maven依賴項
  8. 單擊完成

這應該將庫添加到WEB-INF / lib ,盡管您仍然沒有在Project Explorer視圖中看到它們。 但是你的ClassNotFoundException現在應該消失了。

雖然以上所有內容都適用(Eclipse不是最可信的應用程序),但請確保您已仔細檢查了maven依賴項。 您應該注意,對於jersey 2.19,我必須添加這兩個maven依賴項:

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.19</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.19</version>
    </dependency>

等等,你說你有一個新澤西州庫調用jersey ,你創建一個User Library ,並將它命名jersey 如果是這樣,請嘗試將您的澤西jar文件復制到WebContent - > WEB-INF - > lib

消息很簡單,可以確定Jersey庫不在類路徑中的根本原因。

首先要檢查天氣是否有你在pom.xml中定義的jersey的依賴關系。 如果不是,那么您可以定義依賴項。 如果它已在pom.xml中定義,則忽略在pom.xml中添加依賴項

  <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.19</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.19</version> </dependency> 

解決方案 - 在部署程序集中添加Jersey庫

1.在Project Explorer中右鍵單擊您的項目

2.打開項目的部署程序集配置。

在此輸入圖像描述

3.在程序集中添加構建路徑jar文件,以便將它們添加到最終war文件中的lib文件夾中。

在此輸入圖像描述

4.更新的組件將如下所示。

在此輸入圖像描述

點擊確定。 現在你很高興。

我在Eclipse中遇到了這個問題。 我的項目設置非常相似 - Jersey 2Tomcat 7 我正在從eclipse里面運行tomcat,而且似乎在eclipse的某個地方忘記了如何正確地將庫部署到tomcat。

我嘗試手動部署我的war文件到tomcat並通過startup.sh啟動它並且工作正常,但如果我通過eclipse啟動它我得到我的web內容但是Jersey類不存在所以REST API不起作用。 我的登錄servlet運行正常,而不是澤西位。 控制台有相同的錯誤:

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer

在啟動時。 所以它必然是eclipse如何將代碼部署到tomcat的問題。 我嘗試進入eclipse服務器並清除工作目錄,沒有做任何事情。 (不是因為缺少課程)。

唯一有效的方法是在Eclipse中使用我的Servers配置並刪除我的tomcat條目然后創建一個新的。 我做到了,它立即修復了它。

我也在觀察同樣的問題。 我正在使用tomcat8和Maven。 如果我構建動態Web項目並手動添加所有庫,項目工作正常,但如果我使用Maven,它會出現以下錯誤:

SEVERE: Servlet [Jersey REST Service] in web application [/EmployeeManagement] threw load() exception
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:520)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:501)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:120)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1095)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1031)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4914)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5201)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

我在pom.xml文件中添加了以下maven依賴項:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.21</version>
</dependency>
    <dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>2.21</version>
</dependency>

jersey jar文件放在WEB-INF / lib中應該可行。

如果您無法將您的球衣jar文件放在WEB-INF / lib中 ,請嘗試通過您的工作區手動復制粘貼它並重新啟動eclipse! 這對我有用。

對我來說,修復是這樣做的:

Right click on Project -> Properties -> Java Build Path -> Libraries ->
Add Library... -> Server Runtime -> Apache Tomcat v7.0 -> Finish

我做的另一個步驟是在Maven中導入東西,但它不是必要的,因為它沒有它也運行正常。

但在這里它是否有助於任何人

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2.1-b03</version>
        <scope>provided</scope>
    </dependency>

把servlet jar放在WEB-INF / lib中只是做了一些事情,因為Exception Message變得更加復雜和無關緊要

編輯:哦,還有什么幫助是在你的Maven項目上做一個更新項目。

將Jersey庫添加到庫下的構建路徑

我想補充一下,我有同樣的問題,@ Edin的答案有效,但我使用的是IntelliJ 所以我想我會為Intellij添加一種方法(對於像我這樣的未來人):

  1. 文件
  2. 項目結構
  3. 文物
  4. 你應該有一個以項目命名的工件,選擇它
  5. 在右側,您將看到可用元素列表
  6. 選擇所有可用元素,右鍵單擊,然后選擇將它們添加到WEB-INF / Lib的選項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM