2010-12-02 42 views
9

J'ai plusieurs projets web dynamiques dans mon espace de travail, chacun contient des classes et fait référence à d'autres projets utilitaires (projets Java simples), et à des jars tiers.classes manquantes après publication du projet web dans tomcat en utilisant eclipse wtp

Ces applications (projets web dynamiques) sont déployés sur v6.0.6 tomcat utilisant Eclipse WTP (Helios 3.6)

Lorsque je mets à jour mon espace de travail et de nouvelles classes/ressources/pots sont extraits du dépôt SVN, je re -publier mes applications dans les applications Tomcat, et redémarrez-le. De temps en temps, lorsque Tomcat démarre l'une de mes applications, il lève ClassNotFoundException ou se plaint d'une autre ressource manquante. Parfois je vois que la ressource déployée (spring beans xml par exemple) n'est pas à jour et contient du contenu «ancien».

La commune traitement anti-voodoo-black-magic J'utilise: * stop/start tomcat * propre (quand un clic droit sur la configuration du serveur) * répertoire de travail tomcat propre * supprimer toutes les applications de tomcat , nettoyer, redémarrer tomcat, ajouter toutes les applications

Je dois exécuter cette 'procédure' plusieurs fois jusqu'à ce que le problème soit résolu.

Est-ce que vous en souffrez également? Est-ce un bug connu ? Des suggestions pour y remédier? est l'utilisation de pots au lieu de projets d'utilité va résoudre/réduire ce problème?

Je considérerais plutôt utiliser Embedded Jetty, je veux juste éviter les scripts propriétaires pour lancer Jetty sur un environnement 'production'.

- Yonatan

+0

Cela m'arrive aussi. Le même vaudou s'applique. Ma seule solution est malheureusement de ne pas utiliser eclipse/wtp – Ran

+0

Moi aussi ......... – mjaggard

+0

Une chose que j'ai remarquée quand ce problème m'est arrivé est lorsque j'ai ignoré le dossier de construction du projet eclipse (en utilisant les propriétés - > Ressource -> Filtres de ressources), ajouté le dossier dans tout va bien .. – Chandu

Répondre

3

Cela m'est arrivé beaucoup. Je n'appellerais pas ça Voodoo. Je pense que Eclipse WTP ne fonctionne pas bien lorsque vous modifiez des éléments en arrière-plan (par exemple, une construction maven).

Ce que je fais pour résoudre ceci est d'éviter de l'utiliser complètement. Au lieu de cela, j'utiliser le plugin Maven WAR pour déployer l'application:

mvn war:inplace tomcat:inplace -DskipTests=true 

Cela fonctionne très vite, car il n'a pas besoin d'assembler et emballer la guerre.

ensuite annuler le déploiement de l'application:

mvn tomcat:undeploy 

J'ai des scripts qui

  • Deploy et le démarrage tomact
  • undeploy et d'arrêt tomcat

Il ressemble à ceci:

Démarrer tomcat et déployer l'application:

#!/bin/sh 

if [ -f $CATALINA_PID ]; then 
    echo "tomcat already running with pid " `cat $CATALINA_PID` 
    exit 1 
fi 

java -Dmy.arg=val -Dcatalina.home=<catalina-home> -Dlog4j.configuration=file:///log4j.xml -classpath <path-to-tomcat-lib>/bootstrap.jar:/usr/lib/jvm/java-6-sun-1.6.0.20/lib/tools.jar org.apache.catalina.startup.Bootstrap start & 

echo $! > $CATALINA_PID 

mvn war:inplace tomcat:inplace -DskipTests=true 

Undeploy et arrêt tomcat:

#!/bin/sh 

mvn tomcat:undeploy 

<path-to-tomcat>/shutdown.sh -force 

rm $CATALINA_PID 

La même chose avec probablement tout autre script de construction - juste une question de combien de code vous devez écrire. J'ai choisi la guerre de Maven: le but in-situ est car il fait très peu, et court ainsi très rapidement. Voir ici: maven.apache.org/plugins/maven-war-plugin/usage.html.

BTW, ANT et Gradle ont une tâche de guerre/plugin qui peut probablement être configuré pour faire quelque chose de similaire (je ne me souviens pas vraiment ...)

Hope this helps.

+0

eran- cela signifie-t-il que j'ai besoin d'utiliser maven pour gérer toutes mes dépendances? ou je peux l'utiliser pour le déploiement de guerre seulement? –

+0

Yonatan, maven n'est pas un must ici. Depuis que j'utilise maven de toute façon, c'était la solution la plus simple pour moi. Vous pouvez faire la même chose avec n'importe quel autre script de construction - c'est juste une question de quantité de code que vous devrez écrire. J'ai choisi la guerre de Maven: le but in-situ est car il fait très peu, et donc court très vite. Voir ici: http://maven.apache.org/plugins/maven-war-plugin/usage.html. BTW, ANT et Gradle ont une tâche de guerre/plugin qui peut probablement être configurée pour faire quelque chose de similaire (je ne m'en souviens pas vraiment ...). –

+0

Yonatan, y a-t-il quelque chose qui manque dans ma réponse? –

1

comportement intéressant .... Quelque chose de semblable se passait sur ma machine Linux en raison de problèmes d'autorisation.

Quoi qu'il en soit, je suggère de ne pas utiliser WTP. Essayez plutôt le script de génération ant. C'est simple et pour moi cela fonctionne génial.

1

En travaillant avec Eclipse depuis sa sortie, ces problèmes ont toujours existé. Arrivé ici car atm mon web.xml n'est plus déployé. Surtout en combinaison avec m2eclipse vous ne saurez jamais ce qui se passe lorsque vous essayez de démarrer votre Tomcat. Tout le monde sait comment a travaillé avec Eclipse a ces problèmes, je ne comprends pas pourquoi ils ne sont pas corrigés ... et malheureusement travailler comme entrepreneur signifie que je ne peux pas choisir mon IDE ou le conteneur ou la façon dont la publication est faite , donc la plupart du temps je suis coincé avec WTP.

0

Il semble que des progrès ont été réalisés dans la résolution de ce problème.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=365748

Espérons qu'il sera fixé pour la prochaine version d'Eclipse.

+0

Ce bug dit fixe en 3.4.2 mais je vois toujours le problème en 4.2 – mjaggard

+1

C'est WTP 3.4.2, pas Eclipse 3.4.2. WTP 3.4.2 n'a encore été inclus dans aucune distribution standard d'Eclipse AFAIK; il est apparemment prévu d'être inclus dans Kepler (4.3), qui devrait être publié le mois prochain. – Jules

+0

Merci, malheureusement, je suis incapable de supprimer mon vote négatif sur votre réponse. – mjaggard

1

Une autre chose à vérifier est que Project -> Build Automatically doit être activé et le projet ne devrait pas avoir de problèmes de chemin de construction.

Ouvrez l'affichage du navigateur et confirmez que le dossier de génération a généré les fichiers class.

Si les fichiers ne sont pas créés, ils ne seront pas publiés. Bien que cela semble évident, il est facile de regarder et de gaspiller beaucoup de mon temps.

0

Une solution possible pourrait être que votre dossier bin ne soit pas créé. vérifiez que vous n'avez pas supprimé le dossier build/bin et qu'il existe dans votre espace de travail.

1

J'ai eu un problème similaire. Lorsque j'ai publié une application Web, Eclipse n'incluait pas l'un des fichiers jar et, par conséquent, la publication sur Sever vers Eclipse échouait. J'ai corrigé ceci en modifiant le fichier .classpath du projet pour corriger la dépendance comme ci-dessous. Pour s'assurer que c'est en synchronisation avec d'autres configurations de pots.

<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" sourcepath="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17-sources.jar"> 
      <attributes> 
      <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/> 
     </attributes> 
     </classpathentry> 
+0

Merci beaucoup - c'est la réponse! –