ClassNotFoundException lors du démarrage de tomcat

j'essaie de faire un service de repos sur le web.

mon projet ressemble à:

enter image description here

Le traceback est :

8 déc. 2011 18:31:36 org.apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production     environments was not found on the java.library.path: C:Program FilesMyEclipseCommonbinarycom.sun.java.jdk.win32.x86_1.6.0.013bin;C:Program FilesMyEclipseCommonpluginscom.genuitec.eclipse.easie.tomcat.myeclipse_9.0.0.me201109141806tomcatbin
8 déc. 2011 18:31:36 org.apache.coyote.http11.Http11Protocol init
INFO: Initialisation de Coyote HTTP/1.1 sur http-8080
8 déc. 2011 18:31:36 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 394 ms
8 déc. 2011 18:31:37 org.apache.catalina.core.StandardService start
INFO: Démarrage du service Catalina
8 déc. 2011 18:31:37 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.13
8 déc. 2011 18:31:37 org.apache.catalina.startup.HostConfig deployWAR
INFO: Déploiement de l'archive Test-0.0.1-SNAPSHOT.war de l'application web
8 déc. 2011 18:31:37 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:Documents and SettingsNayaWorkspacesMyEclipse 10.metadata.me_tcatwebappsTest-0.0.1-SNAPSHOTWEB-INFlibjavax.servlet-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
8 déc. 2011 18:31:37 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:Documents and SettingsNayaWorkspacesMyEclipse 10.metadata.me_tcatwebappsTest-0.0.1-SNAPSHOTWEB-INFlibservlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
8 déc. 2011 18:31:38 org.apache.catalina.core.ApplicationContext log
INFO: La servlet Test JAX-RS REST Servlet est marqué comme indisponible
8 déc. 2011 18:31:38 org.apache.catalina.core.ApplicationContext log
GRAVE: Error loading WebappClassLoader
delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@19e8329
 com.sun.jersey.spi.container.servlet.ServletContainer
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1083)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4042)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4348)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:825)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:714)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

ma toile.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name> 
  <servlet>
    <display-name>Test JAX-RS REST Servlet</display-name>
    <servlet-name>Test JAX-RS REST Servlet</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Test JAX-RS REST Servlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

quelqu'un Peut-il m'aider ?

24
demandé sur ROMANIA_engineer 2011-12-09 14:24:17

12 réponses

j'ai rencontré le même problème. J'ai été en utilisant la Version 1.12.

Je ne trouvais pas la classe com.sun.jersey.spi.container.servlet.ServletContainer dans le" jersey-server-1.12.jar " ou " jersey-core-1.12.jar" comme suggéré dans d'autres forums.

vous pouvez facilement vérifier cela dans Eclipse, quand vous l'ajoutez au chemin de compilation et remarquez que vous n'avez pas cette classe dans les fichiers jar mentionnés ci-dessus.

j'ai cherché partout et j'ai trouvé ce qui suit:

on dirait que la classe com.sun.jersey.spi.container.servlet.ServletContainer est dans un fichier jar différent ("jersey-servlet-1.12.pot.)"

Je n'ai pas trouvé de documentation à ce sujet. Cependant, avoir ce fichier dans mon WEB-INF / lib a résolu ce problème.

Espérons que cette aide.

32
répondu Anjaneya Reddy 2014-03-20 14:00:49

Solution:

ajouter seulement la dépendance dans pom.xml:

 <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-servlet</artifactId>
      <version>1.13</version>
 </dependency>

Maintenant votre application aura la classe com.soleil.Jersey.le spi.conteneur.servlet.ServletContainer

ps: N'oubliez pas de vérifier si les bibliothèques sont envoyées au Tomcat deploy.

pour vérifier:

faites un clic droit sur votre projet - > Propriétés - > monteur de déploiement et assurez-vous que l'onglet source contient Maven Dependecies .

autrement:

cliquez sur le bouton Add - > Java Build Path - > Maven Dependecies - > Finish.

prêt chaque fois que vous lancez le application tous les libs seront importés dans le deploy.

ps: lorsque le projet Maven est mis à jour, vous devez refaire ces étapes.

35
répondu Diego 2013-04-20 21:28:01

si vous travaillez avec Maven alors le problème possible pourrait être que vos bocaux ne sont pas déployés à votre Tomcat. Ainsi, vous avez vos dépendances Maven dans le chemin de compilation Java (Project > Properties > Build path), mais lorsque vous exécutez le projet sur votre Tomcat à partir des dépendances Maven D'Eclipse, ne vous déployez pas sur TOmcat. Pour résoudre ce problème, vous devez: cliquer avec le bouton droit de la souris > propriétés et sélectionner "déploiement Assemblée". Et ajouter des entrées Java Build Path. De cette façon, vous avez dit le plugin WTP (celui qui exécute Tomcat dans Eclipse) qu'il devrait également copier les pots de Maven enter image description here

18
répondu luigi7up 2012-12-10 16:21:03

Jersey 2.0 , le conteneur de servlets mise en œuvre changé. Vous devez utiliser org.glassfish.Jersey.servlet.ServletContainer au lieu de l'ancien com.soleil.Jersey.le spi.conteneur.servlet.ServletContainer

la classe est dans

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

vous pouvez créer un projet squelettique en utilisant:

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp -DarchetypeGroupId=org.glassfish.jersey.archetypes -
DinteractiveMode=false -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example -DarchetypeVersion=2.0-m11
9
répondu JasonPlutext 2013-01-11 07:48:35

vous devez mettre le Jersey JAR dans votre WEB-INF/lib répertoire, que vous exécutiez Tomcat séparément ou avec Eclipse.

ça a marché pour moi.

3
répondu Anupam 2012-04-25 05:21:34

Le chargeur de classe ne peut pas trouver la classe com.sun.jersey.spi.container.servlet.ServletContainer .

vous devez mettre le Pot De Jersey dans votre répertoire WEB-INF/lib .

Ce qui pourrait aider:

http://www.suryasuravarapu.com/2009/02/rest-jersey-configuration-on-tomcat.html

maintenant j'ai regardé l'image que vous avez posté et je vois votre problème: vous utilisez Eclipse et Maven, mais vous ne comprenez pas vraiment ce que ils sont en train de faire.

vous devez vous retrouver avec un fichier de guerre dans le répertoire /webapps de Tomcat qui contient tous les pots de tierce partie dont vous avez besoin dans le répertoire WEB-INF/lib . Sinon, Tomcat ne les trouvera pas.

je vous recommande de simplifier votre problème. Créer un fichier de guerre à la main; laisser Eclipse et Maven en dehors de cela. Une fois que vous l'avez fait fonctionner, ajoutez les choses qui sont censés rendre votre vie plus facile. Vous aurez à comprendre ce qu'ils doivent faire, parce que vous l'aurez déjà fait fonctionner sans eux.

1
répondu duffymo 2011-12-09 10:29:32

le poste de luigi7up ci-dessus travaillait pour moi. J'utilise tomcat 7.0.37, maven 3.1.1, et jersey 1.17.1. J'ai fait le clic droit -> Propriétés -> montage de déploiement -> ajout de clic -> entrées du chemin de compilation Java -> dépendances Maven sélectionnées. J'ai ensuite cliqué sur ok.

quand j'ai essayé pour la première fois, j'ai remarqué que je ne recevais plus le "java.lang.ClassNotFoundException: com.soleil.Jersey.le spi.conteneur.servlet.Erreur ServletContainer", mais j'ai alors remarqué que je recevais la classe "autre" pas trouvé' messages (malheureusement, je n'ai pas documenté ce que les messages étaient). J'utilisais la dépendance suivante de jersey:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-bundle</artifactId>
    <version>1.17.1</version>
</dependency>

j'ai pris cela et mis dans les dépendances suivantes:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-core</artifactId>
    <version>1.17.1</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.17.1</version>
</dependency>

les choses ont commencé à fonctionner après cela.

Espérons que cela aide quelqu'un!

1
répondu Stephen Spalding 2014-01-20 01:00:26

Anjaneya Reddy, comme vous l'avez souligné, la classe n'est même pas dans le bocal où elle est censée être. Ce qui me déroute, où est-il et où, dans la documentation de ne toucher à ce sujet?!?

avec tout étant si convivial Maven maintenant, il est difficile de sauter un simple tutoriel sans avoir besoin de compter sur elle.

0
répondu Half_Duplex 2012-09-25 19:05:43

Je l'ai ajouté au répertoire WEB-INF/lib mais il n'a pas fonctionné jusqu'à ce que je rafraîchisse le dossier lib à partir D'Eclipse et puis il a commencé à fonctionner.

0
répondu Milind 2012-10-29 18:29:16

vous êtes apparemment requis bibliothèques manquantes de votre chemin de classe de déploiement.

copier les bocaux suivants dans le répertoire WEB-INF/lib

asm-3.1.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
jersey-client-1.15.jar
jersey-core-1.15.jar
jersey-json-1.15.jar
jersey-server-1.15.jar
jersey-servlet-1.15.jar
jettison-1.1.jar
jsr311-api-1.1.1.jar
0
répondu bavan 2012-11-28 21:33:14

de: http://jersey.java.net/nonav/documentation/latest/chapter_deps.html#d4e1687

déployer une application sur un conteneur servlet nécessite une dépendance de déploiement avec ce conteneur.

voir la documentation Java ici sur la façon de configurer le conteneur servlet.

utilisant servlet: com.soleil.Jersey.le spi.conteneur.servlet.ServletContainer nécessite une dépendance sur le jersey-servlet module.

Maven développeurs à l'aide de servlet: com.soleil.Jersey.serveur.impl.conteneur.servlet.ServletAdaptor dans un servlet Non-EE 5 nécessite une dépendance sur le module persistence-api en plus.

Non-Maven développeurs exiger: la persistance de l'api.jar

0
répondu Leonid 2013-01-29 10:05:33

la dépendance suivante aide:

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-server</artifactId>
  <version>1.8</version>
</dependency>

voir: http://www.mkyong.com/webservices/jax-rs/classnotfoundexception-com-sun-jersey-spi-container-servlet-servletcontainer /

0
répondu Benny Neugebauer 2013-06-14 23:30:09