[英]Jersey - 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 。 如果沒有(無論出於何種原因),您可以明確地這樣做:
這應該將庫添加到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 2
, Tomcat 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添加一種方法(對於像我這樣的未來人):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.