eclipse / tomcat: le déploiement ne fonctionne plus (ClassNotFoundException)
je lance Eclipse Helios Service Release 1, avec Tomcat 7.0.12 dans Linux Ubuntu Natty Narwhal.
j'ai été heureux chaud re-déployant mon webapp jusqu'à ce qu'il a cessé de fonctionner pour apparemment aucune raison. L'exception suivante s'affiche:
SEVERE: Allocate exception for servlet Index
java.lang.ClassNotFoundException: obliquid.servlet.Index
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
- Serveurs tab j'ai " Tomcat v7.0 Server at localhost [Started, Synchronized]
- mon projet apparaît comme un enfant de Tomcat v7.0 serveur
- Dans Les Propriétés, Java Build Chemin de la Source que j'ai Projet/src dossier Source
- Dans la fenêtre Propriétés de Déploiement Web de l'Assemblée, j'ai les mappages suivants: /WebContent -> /,/src -> / WEB-INF / classes,/test -> /build / classes
- Mon src le répertoire contient un Servlet dans obliquid/servlet / Index.java
- j'ai déjà essayé de cliquer sur Nettoyer Le Travail Des Modules Répertoire... et Publier
- j'ai essayé d'arrêter et de démarrer le serveur à partir de L'onglet Eclipse Servers
Que dois-je vérifier? Remercier.
UPDATE malgré que maintenant je travaille avec le nouveau projet, je suis revenu pour vérifier l'ancien, et mystérieusement maintenant il fonctionne. Je pense que je ne pourrai pas trouver ce qui s'est passé.
cependant aujourd'hui avec le nouveau projet, j'ai eu 404 erreurs sans aucune apparente reason et moi avons découvert que le clic droit sur le serveur Tomcat et la sélection " nettoyer..."peut-être utile. Peut-être qu'il aurait pu aider.
Sélectionner "Nettoyer..."dit:" Clean rejettera tout l'état de publication et de republier à partir de zéro. Êtes-vous sûr de vouloir nettoyer toutes les ressources publiées?". En sélectionnant oui, j'ai résolu le problème
UPDATE 2 cela s'est produit à nouveau sur le nouveau projet. 404 erreurs, cette fois ils ne vont pas loin.
Stop -> Clean... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Start (404)
Stop -> Clean Tomcat Work Directory... -> Clean... -> Start (404)
Stop -> Remove on the application -> Clean... -> Run As -> Run on Server -> (404)
Exit Eclipse, Start Eclipse
Start the server -> (404)
UPDATE 3 il s'est avéré que cette fois je n'ai pas remarqué une exception causée par une classe d'écoute au démarrage. Après avoir résolu le problème, ça a marché. Je devrais arrêter de travailler à 3 h du matin.
10 réponses
sur Tomcat 6 et Eclipse Ganymede j'ai découvert la chaîne suivante pour travailler comme charm:
1 arrêter le serveur
2 -> clean
3 projet de construction (j'ai eu de construction automatique désactivé)
4 supprimer le serveur
5 supprimer le dossier des serveurs
6 redémarrer Eclipse
7 créer un nouveau serveur, ajouter un projet :)
prend un certain temps mais a fonctionné comme un charme. Mon problème était un irritant Auditeur problème de démarrage, mais cela semble être quelque chose de similaire: une propriété chez tomcat. Btw: de nos jours, je suis aussi un grand fan de Glassfish.
j'ai trouvé que cette procédure est utile:
- Cliquez sur Serveurs tab et arrêter le serveur utilisé s'il exécute
- clic Droit sur le serveur et sélectionnez propre...
- nouveau clic Droit et sélectionnez Nettoyer Le Répertoire De Travail Tomcat...
J'espère que la ClassNotFoundException devrait disparaître maintenant.
une autre fois j'ai eu un problème avec une classe lancée au démarrage du serveur, une exception dans une classe d'écoute (ServletContextListener). Lorsqu'un ServletContextListener lève une exception au démarrage, le déploiement de l'application est arrêté, d'où les erreurs 404. Dans ce cas, la résolution du problème à l'origine de l'exception a fait fonctionner à nouveau l'application.
EDIT: cette procédure plus courte a fonctionné pour moi la plupart du temps, mais aujourd'hui n'a pas fonctionné et j'ai dû suivre la procédure prolongée de Mico. Ma suggestion est, si vous avez un problème similaire, d'abord essayez cette courte intervention. Si le problème persiste, essayez avec Mico.
je vous recommande d'arrêter et de redémarrer le serveur Tomcat. Le déploiement à chaud ne fonctionne pas pour toujours; il y a certains problèmes qui vous obligeront à redémarrer après quelques redéploiements.
je me demande quand je vois le accepté réponse + 25 est-il vraiment précis?
D'abord, si vous supprimez le serveur, à quoi sert-il de le nettoyer? Il va prenez votre temps inutilement et vous ne gagnerez rien d'utile.
Donc je vais juste dire 5, 6, 7 étapes à faire de la magie
5 supprimer le dossier des serveurs
6 redémarrer Eclipse
7 créer un nouveau serveur, ajouter le projet et démarrer
Cela pourrait être quelque chose que j'ai appris sur avoue 2011. Pour moi cela ressemble à un problème de classloader.
La théorie derrière:
Java n'utilise pas seulement le type de la classe mais aussi le classloader qui l'a chargée pour identifier le type d'une instance. Cela signifie qu'une opération simle pourrait échouer, par exemple
ClassA a1 = new a1; ClassA a2 = Somotherclass.giveMeInstanceOfA(); a1 = a2;
ce exemple échouerait si Somethotherclass utilise un classloader différent parce que Java dirait qu'ils ne sont pas les mêmes.
- l'orateur a également mentionné que certains serveurs utilisent par défaut environ 45 classloaders différents.
Qu'est-ce que cela signifie dans la pratique:
vous déployez votre webapp sur le serveur, tout va bien. Le serveur Cache Les cours et tout ce dont il a besoin pour les charger quelque part. Maintenant vous faites un déploiement à chaud et le serveur peut charge de nouvelles classes avec un nouveau (ou différent) classloader. C'est le point où cela commence à devenir dangereux parce qu'à partir de Maintenant vous avez deux classes différentes dans la mémoire qui devraient être les mêmes. Les opérations simples comme casts (ClassA a = (ClassA) new ClassA()) échouent, de nouvelles méthodes dans la classe ne sont pas trouvées (parce que le serveur prend une version en cache sans cette méthode),....
C'est le point où je redémarre le serveur, nettoyer le répertoire de travail (pour se débarrasser de la versions en cache) et commencer à penser au déploiement à chaud comme chose critique.
S'il est possible d'essayer Mikkos procedere et que cela résolve le problème, cette explication pourrait vous aider à comprendre pourquoi.
je sais que cela ne résout pas votre problème mais je peux vous donner quelques indices sur ce qui a pu se passer.
j'ai acquis une nouvelle expérience en programmation et je ne meurs plus de faim avec la combinaison Eclipse + Tomcat. Plusieurs moyens peuvent vous aider à vous libérer de l'utilisation de cette combinaison:
tout d'Abord, ne les utilisez pas ensemble!
vous pouvez utiliser d'autres IDEs disponibles, par exemple IntellijIdea (qui n'est pas libre, mais qui vaut la peine d'investir) a une propriété que lorsque vous déboguez un code Java, vous pouvez changer le code à la volée et compiler les fichiers Java un par un et ensuite il suggère si vous voulez avoir mis à jour sur le serveur. Aucun redémarrage nécessaire presque jamais (bien sûr il se perd parfois, mais surtout il fonctionne).
utilisez le serveur tomcat autonome, pas celui de Eclipse / votre IDE. Ce premier truc ne fonctionne que lorsque vous déboguez un serveur externe, rien dans IDE. Voici la deuxième astuce: si vous ne modifiez que le contenu JSP ou html, ces fichiers peuvent être copiés au bon endroit dans le dossier webapp de tomcat. manuellement avec la commande unix cp ou windows copy et si vous vous trouvez à développer des fichiers dans le même foulder longtemps, vous pouvez copier le contenu du dossier (par exemple myFolder/*.jsp) autant de fois que vous le souhaitez et aucun redémarrage n'est nécessaire à tous. Les changements sont visibles lorsque vous touchez ou modifiez et sauvegardez le web.fichier xml à l'intérieur du dossier webapps et ensuite avec rafraîchissement de la page visible sur le navigateur. Probablement rafraîchir dur avec CTRL+F5 est la meilleure façon.
merci à @Verdan à propos de son commentaire, sinon je ne serais pas revenu pour répondre à nouveau.
en parlant de déploiement à chaud de Tomcat, vous rencontrerez en effet divers problèmes, dont le moindre est une fuite de mémoire, ce qui explique pourquoi vous devrez redémarrer l'application. Je vous recommande d'essayer votre produit pour le traitement rapide de "faire et enregistrer les modifications, puis actualisez le navigateur et de voir les changements immédiatement". Vous pouvez trouver le JRebel hands-on lab, qui montre comment l'utiliser avec Tomcat et Eclipse. http://www.javapassion.com/rebels/jrebel_basics/
je rencontrais le même problème-j'ai essayé tout ce qui précède, Eclipse s'est toujours dégonflée lorsque j'ai essayé de démarrer le serveur, même après avoir supprimé toutes les configurations du serveur et en avoir créé une nouvelle avec une instance tomcat fraîchement téléchargée. Quoi qu'il en soit, le problème n'a pas été résolu jusqu'à ce que je déménage dans un nouvel espace de travail, réimporté les projets et créé un nouveau serveur. Ça ressemble à un bogue D'éclipse pour moi...donc au cas où rien d'autre ne fonctionne, c'est la voie à suivre...
je suis actuellement aux prises avec le même problème, mais rien de mentionné ici ne m'aide. Quoi qu'il en soit, j'ai découvert que si je:
- arrêter le serveur dans eclipse
- exécuter tomcat ailleurs (dans mon cas, le xamp distribution)
- arrêt actuellement en cours d'exécution de tomcat
- démarrer tomcat dans eclipse
tout fonctionne très bien, bien sûr jusqu'à ce que je change quelque chose dans le code et essayer de le tester à nouveau.
j'ai pu résoudre ce problème en désactivant la nature maven (clic droit sur project >> maven >> disable maven nature). Puis la réactiver (clic droit sur project >> configure >> convertir en Maven project). J'avais essayé tous les autres trucs et astuces ci-dessus, mais c'est le seul qui a finalement fonctionné.