it-swarm.com.de

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

Vielleicht haben Sie das Gefühl, dass dies eine doppelte Frage ist, aber keine der Fragen mit demselben Titel löst meine Probleme. Ich verwende Jersey 2.0 und erstelle einen RESTful-Webdienst in Eclipse. Ich verwende Tomcat 7.0 als Server. Ich habe folgenden 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>

Ich habe eine einfache Klasse namens Hallo:

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

Ich habe eine Jersey-Bibliothek namens jersey:

enter image description here

Jedes Mal, wenn ich dieses Projekt leitete, bekam ich einen Fehler

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

Irgendwelche Ideen?

11
Tom

Warten Sie, Sie sagten, Sie hätten eine Jersey-Bibliothek namens jersey. Haben Sie einen User Library erstellt und ihn jersey genannt? Versuchen Sie in diesem Fall, Ihre Jersey-JAR-Dateien in WebContent -> WEB-INF -> lib zu kopieren. 

3
Zhenxiao Hao

Ich denke, das wurde schon beantwortet, wollte aber nur einen zusätzlichen Tipp hinzufügen.

Für Webprojekte in Eclipse ist es fast immer ratsam, Abhängigkeiten mit Maven zu verwalten. Verwenden Sie ein Maven-Plugin wie m2e. Wenn Sie Ihrem Maven-Projekt eine Abhängigkeit hinzugefügt haben, sollten diese Bibliotheken automatisch in WEB-INF/lib bereitgestellt werden. Wenn dies nicht der Fall ist (aus welchen Gründen auch immer), können Sie dies ausdrücklich tun:

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt in Project Explorer
  2. Wählen Sie Eigenschaften
  3. Wählen Sie Deployment Assembly
  4. Wenn Maven Dependencies keiner der Einträge ist, wurden die Bibliotheken nicht automatisch hinzugefügt, also fügen wir sie jetzt hinzu
  5. Wählen Sie Hinzufügen
  6. Wählen Sie Java Build Path-Einträge
  7. Wählen Sie Maven-Abhängigkeiten
  8. Klicken Sie auf Fertig stellen

Dies sollte die Bibliotheken zu WEB-INF/lib hinzufügen, obwohl Sie sie immer noch nicht in der Projekt-Explorer-Ansicht sehen. Aber Ihre ClassNotFoundException sollte jetzt verschwinden.

19
Ebin

Während alle oben genannten Bedingungen zutreffen können (Eclipse ist nicht die glaubwürdigste Anwendung), stellen Sie sicher, dass Sie Ihre Maven-Abhängigkeiten überprüft haben. Sie sollten beachten, dass ich für Jersey 2.19 diese beiden Abhängigkeiten hinzufügen musste:

    <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>
5

Ich habe dieses Problem mit Eclipse. Mein Projekt, das einen sehr ähnlichen Aufbau hat - Jersey 2, Tomcat 7. Ich führe Tomcat in Eclipse aus, und es scheint, dass Eclipse irgendwann vergessen hat, wie man die Bibliotheken ordnungsgemäß in Tomcat bereitstellt.

Ich habe versucht, meine Kriegsdatei manuell auf Tomcat bereitzustellen und sie über startup.sh Zu starten, und es hat funktioniert, aber wenn ich sie über Eclipse starte, erhalte ich meinen Webinhalt, aber die Jersey-Klassen sind nicht vorhanden, daher die REST API funktioniert nicht. Mein Login-Servlet funktioniert einwandfrei, nur nicht das Trikot-Bit. Die Konsole hat den gleichen Fehler:

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

beim Start. Es muss also ein Problem damit geben, wie Eclipse Code für Tomcat bereitstellt. Ich habe versucht, auf Eclipse-Servern zuzugreifen und das Arbeitsverzeichnis zu löschen, habe aber nichts getan. (nicht, dass es für fehlende Klassen wäre).

Das einzige, was funktionierte, war, meine Serverkonfiguration in Eclipse aufzurufen und meinen Tomcat-Eintrag zu löschen und dann einen neuen zu erstellen. Ich habe das getan und es hat es sofort behoben.

1
Damon Smith

Die Nachricht ist einfach genug, um die Ursache zu ermitteln, dass sich die Jersey-Bibliotheken nicht im Klassenpfad befinden.

Als Erstes sollten Sie überprüfen, ob das Wetter in pom.xml definiert ist oder nicht. Wenn nicht, dann sind die Abhängigkeiten, die Sie definieren können. xml, ignorieren Sie das Hinzufügen von Abhängigkeiten in Ihrer 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>

Lösung - Hinzufügen einer Jersey-Bibliothek in der Bereitstellungsassembly

1. Klicken Sie im Projekt-Explorer mit der rechten Maustaste auf Ihr Projekt.

2. Öffnen Sie die Konfiguration der Projektbereitstellung für die Projektbereitstellung.

 enter image description here

3. Fügen Sie Build-Pfad-JAR-Dateien in Assembly hinzu, damit sie zum Ordner Lib in der final-war-Datei hinzugefügt werden können.

 enter image description here

4. Die aktualisierte Baugruppe sieht folgendermaßen aus.

 enter image description here

Klicken Sie auf OK . Nun können Sie loslegen.

1
Varun

Ich beobachte auch das gleiche Problem. Ich verwende Tomcat8 mit Maven. Wenn ich Dynamic Web Project erstelle und alle Bibliotheken manuell hinzufüge, funktioniert das Projekt gut, aber wenn ich Maven verwende, wird folgender Fehler angezeigt:

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)

Ich habe folgende Maven-Abhängigkeiten in der Datei pom.xml hinzugefügt:

<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>
0
Devil

Fügen Sie dem Build-Pfad unter Library die Jersey-Bibliothek hinzu

0
Mohit Singh

Die jersey-jar-Dateien sollten in WEB-INF/lib eingefügt werden.

Wenn Sie Ihre Trikot-JAR-Dateien nicht in WEB-INF/lib ablegen können, versuchen Sie es manuell zu kopieren, indem Sie durch Ihren Arbeitsbereich gehen und Eclipse neu starten! Das hat bei mir funktioniert. 

0

Ich möchte hinzufügen, ich hatte das gleiche Problem und die Antwort von @ Edin hat funktioniert, jedoch habe ich IntelliJ verwendet. Also dachte ich, ich würde einen Weg hinzufügen, um dies für Intellij (für zukünftige Leute wie mich) zu tun:

  1. Datei
  2. Projektstruktur
  3. Artefakte
  4. Sie sollten dort ein Artefakt nach Ihrem Projekt benannt haben, wählen Sie es aus
  5. Auf der rechten Seite sehen Sie eine Liste Available Elements
  6. Wählen Sie alle verfügbaren Elemente aus, klicken Sie mit der rechten Maustaste, und wählen Sie dann die Option aus, mit der sie zur WEB-INF/Lib hinzugefügt werden.
0
Miniman

Für mich war das Problem:

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

Ein weiterer Schritt, den ich gemacht habe, war das Importieren von Material in Maven, aber es war nicht notwendig, da es auch ohne es gut läuft.

Aber hier ist es, wenn es jemandem hilft

    <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-Jars in WEB-INF/lib zu setzen, machte die Sache komplizierter, da die Exception Message komplizierter und irrelevanter wurde

BEARBEITEN: ach was hilft auch, ein Update-Projekt für Ihr Maven-Projekt durchzuführen.

0
kaya