Intégration de tomcat et eclipse comme environnement de déploiement à chaud

Je voudrais configurer eclipse et tomcat de manière intégrée afin que les modifications apscopes à mes JSP et servlets (si possible) soient reflétées immédiatement sans nécessiter de déploiement.

Ok, c’est une de ces questions qui a beaucoup de réponses sur Internet, mais elles semblent toutes différentes. (utilisez le plugin Sysdeo, utilisez le plugin JBOss, faites des trucs avec une Eclipse obsolète, utilisez plutôt MyEclipse etc.) et je n’ai pas pu trouver 1 ressource définitive à référencer. Donc, pour mon bénéfice, quelle est la procédure la plus simple et la plus recommandée pour mettre cela en place?

Cela suppose que j’exécute Eclipse et Tomcat indépendamment. En fait, j’ai réussi à les intégrer dans un mode de déploiement à chaud en suivant les instructions fournies ici: http://www.ibm.com/developerworks/opensource/library/os-eclipse-tomcat/index.html

Version Eclipse Version: 3.4.2 (Ganymede) Tomcat v6.0.20

Il y a deux options.

Tout d’abord, Eclipse vous permet de le faire, avec un léger changement de configuration (voir aussi ce post détaillé )

  • append Tomcat à la liste des serveurs
  • faire le projet “Projet web dynamic” (soit via l’assistant de création, soit via la section des facettes dans les parameters)
  • append le projet à tomcat et configurer son “assembly de déploiement”
  • double-cliquez sur tomcat dans la liste pour ouvrir les configurations
  • Changez “Publication” pour “Ne jamais publier automatiquement” (cela signifie que le serveur ne sera pas redémarré lorsque vous appuyez sur Ctrl + S)
  • démarrer tomcat en mode débogage

Cela reflétera toujours les modifications du code mais ne redémarrera pas le serveur.

Deuxièmement, j’ai utilisé le plugin FileSync pendant longtemps:

  • configurer le plug-in pour envoyer toutes les classes du directeur de la corbeille à WEB-INF/classes de votre installation tomcat (c’est presque la même chose que configurer l’assemblage de déploiement)
  • configurer toutes les autres ressources pour aller à leurs emplacements respectifs
  • facultativement, externalisez tous les chemins absolus à partir des parameters de localisation de la synchronisation de fichiers en une seule variable et configurez cette variable dans eclipse (vous pourrez ainsi valider les parameters de synchronisation de fichiers si tous les membres utilisent eclipse)
  • Ajouter Tomcat à la liste des serveurs dans eclipse, configurez l’option “Emplacements du serveur” sur “Utiliser l’installation tomcat” (l’écran s’ouvre lorsque vous double-cliquez sur tomcat dans la liste des serveurs)
  • démarrer tomcat en mode débogage

Cela fonctionne parfaitement pour moi de cette façon. Tout changement non structurel est reflété immédiatement, sans redéploiement.

Mettre à jour:
Vous pouvez en savoir plus sur les méthodes de déploiement à chaud ici .
J’ai également créé un projet qui synchronise facilement l’espace de travail avec le conteneur de servlet.

Laissez simplement eclipse écrire les fichiers de classe directement dans le répertoire $ TOMCAT / webapps / MyWebApp / WEB_INF / classes. Configurez ensuite apache-tomcat pour vérifier si les fichiers de classe ont été mis à jour et rechargez-les s’ils existent.

Pour configurer tomcat afin de recharger automatiquement une classe lorsqu’elle change, vous devez

éditez $TOMCAT/conf/context.xml et définissez:

  

Vous devrez peut-être également modifier et recharger votre fichier webapps/$YourWebApp/web.xml et inclure:

  

Je ne me souviens plus si les deux modifications sont nécessaires, mais c’est ainsi que j’ai configuré mon tomcat-6.0.18 pour le recharger automatiquement.

Disclaimer : Je ne suis qu’un client satisfait, je ne travaille pas pour Zero Turnaround et je ne suis en aucune façon affilié avec eux.

Découvrez JRebel – il vous permet de coder sans redémarrage de l’application Web. Cela fonctionne essentiellement en instrumentant vos classes et en adaptant leurs changements. Il gère beaucoup plus de cas que le déploiement à chaud , notamment:

  • Ajout / suppression de méthodes
  • Ajouter / supprimer des constructeurs
  • Changer d’interface
  • Ajout / suppression d’interfaces implémentées

C’est commercial , ( détails du prix , 550 $ / an à compter de juin 2018), et il y a beaucoup de plugins pour les frameworks tiers, y compris:

  • Guice
  • Printemps
  • Struts 2

Vous obtenez un essai gratuit sans douleur – je vous suggère de tenter votre chance.

Changer votre espace de travail dans Eclipse à \ tomcat \ webapps Comme il ne s’agit que de votre travail, cela devrait fonctionner correctement. Les modifications apscopes à Eclipse se trouvent dans le même répertoire. Tomcat recherche les applications à déployer

Dans la vue Serveurs, créez un nouveau serveur, n’ajoutez aucune ressource (projet) au serveur pour le moment. Double-cliquez sur le serveur dans l’emplacement des serveurs. Choisissez “Utiliser l’installation de tomcat”. Modifiez “Chemin de déploiement” dans le répertoire de déploiement tomcat (Ex: c: \ server \ Tomcat 7.0.14 \ webapps). Étendre “Section de publication”. Cochez “Publier automatiquement après un événement de construction”. Sauver et fermer. Dans le menu Eclipse, cochez “Projet -> Construire automatiquement”. Depuis la vue des serveurs, cliquez avec le bouton droit sur votre serveur, “Ajouter et supprimer”, publiez votre projet.

Pourquoi ne pas utiliser un serveur Tomcat intégré de avec in in eclipse si ce n’est que pour le développement? Vous pouvez configurer des serveurs sous window-> preferences. Une fois configuré si vous avez un fichier jsp appelé page.jsp, vous pouvez cliquer dessus avec le bouton droit de la souris et sélectionner Exécuter sur le serveur. Sous Préférences-> Général-> Navigateur Web, vous pouvez choisir la météo pour utiliser le navigateur intégré ou externe. Apportez des modifications à votre fichier jsp, enregistrez et actualisez votre page à partir du navigateur. Les modifications seront automatiquement reflétées une fois que vous enregistrez et actualisez votre navigateur.

Ce qui fonctionne pour moi ici est:

context.xml comme ceci:

     

Ensuite, dans l’onglet Serveurs d’Eclipse, dans l’onglet “Modules”, j’ai désactivé le “Auto Reload” sur tous les modules en cours de déploiement.

Laissez également la configuration par défaut pour laisser la publication automatique.

Et utilise Maven avec WTP, n’oubliez pas de laisser le contenu de src / main / resources, car Eclipse insiste pour exclure le contenu de ce dossier de la version finale.

Seulement avec tout cela j’ai eu des classes complètes (VM) déployées à chaud avec des ressources déployées à chaud !!!

Dans votre environnement de développement, pointez simplement votre serveur Tomcat pour qu’il recherche les fichiers JSP dans le répertoire dans lequel vous les développez. Dès que vous enregistrez le fichier, vous pourrez alors voir les modifications.

Êtes-vous ouvert à utiliser Jetty à des fins de développement?

Si c’est le cas, c’est assez simple à utiliser avec Maven – lancez simplement mvn jetty:run

Ce n’est peut-être pas le meilleur moyen, mais cela fonctionne pour moi.

  • $ tomcat / conf / Catalina / localhost / .xml
  • $ contextPath / webapp / web / WEB-INF / lib / *. jar
  • $ contextPath / webapp / web /
  • $ eclispeWorkbench / project-servlet / src /
  • $ eclispeWorkbench / project-servlet / servlet.jardesc (devrait exporter jar vers lib dans $ contextPath)
  • $ eclipseWorkbench / project-jsp /

J’utilise une commande rsync pour synchroniser les modifications de mon projet jsp au $ contextPath.

Utilisez le débogage distant dans Eclipse pour Tomcat, ce qui permettra un remplacement à chaud limité du code. Si vous modifiez des champs statiques ou ajoutez des méthodes, vous devrez exporter le fichier JAR et redémarrer le contexte.

pouvons-nous utiliser l’option ci-dessous? Double-cliquez sur Serveur dans eclipse -> Emplacements du serveur -> Utiliser l’installation de tomcat. Il prend le contrôle de l’installation de tomcat. Vous n’avez pas besoin de redémarrer le serveur pour modifier les classes Java.

J’ai trouvé le moyen le plus simple: utiliser des liens symboliques: je pense que c’est le moyen le plus rapide car il n’y a pas de synchronisation du tout: répertoire tomcat et votre répertoire de projet sera le même répertoire tout le temps.

Tomcat détecte régulièrement les modifications et redéploie votre application.

Il y a aussi un moyen de déboguer votre application, alors je pense humblement que c’est une bonne solution.

J’ai documenté ma solution ici , pour toute personne intéressée.

Au cas où vous êtes pressé:

  1. cochez “ne jamais publier automatiquement” dans tomcat (autre conteneur) dans eclipse.
  2. démarrer tomcat (autre conteneur) en mode débogage.

voila! 🙂

J’ai réussi à le faire fonctionner dans mon environnement de développement à l’aide de l’agent JVM Spring Loaded . Bien que je développe des applications Web Spring, la description de ce projet mentionne qu’il est

utilisable sur tout bytecode pouvant s’exécuter sur une machine virtuelle Java

En utilisant la configuration suivante, j’ai pu obtenir des modifications pour publier automatiquement sur une instance Tomcat attachée (la méthode Eclipse WTP habituelle). J’utilise Spring Tool Suite 3.7.3 basé sur Eclipse Mars.2 (4.5.2).

  1. Téléchargez la dernière version du JAR de Spring Loaded de leur projet Github . Cela a été testé avec springloaded-1.2.5.RELEASE.jar.
  2. Configurer un serveur Tomcat dans Eclipse comme d’habitude (testé avec Tomcat 8.0.30)
  3. Ouvrez la page de configuration du serveur Tomcat dans Eclipse (double-cliquez sur l’instance du serveur dans l’onglet “Serveurs”).
  4. Dans la section “Options du serveur”, décochez “Rechargement automatique des modules par défaut”.
    • Remarque: Si vous avez déjà ajouté des modules Web au serveur, vous devrez peut-être les désactiver individuellement sur l’onglet “Modules” (en bas de la fenêtre de la page de configuration).
  5. Dans la section “Informations générales”, cliquez sur “Ouvrir la configuration de lancement”
    • Dans l’onglet “Arguments”, ajoutez ce qui suit à la fin des “arguments VM”: -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Pour permettre aux fichiers JAR d’être surveillés en plus des fichiers .class du projet, configurez l’ -Dspringloaded=watchJars= VM selon les commentaires de ce problème .

Démarrez le serveur et publiez les projets d’application Web dynamic comme d’habitude. Encore une fois, j’ai pu tester cela avec les applications Web Spring. Par exemple, la modification du code, l’ajout / la soustraction de méthodes, etc. dans les classes @Controller ont été appliquées presque instantanément après la sauvegarde du fichier et la génération d’Eclipse et la publication de la classe modifiée. Enfin, la section FAQ du projet Spring Loaded a mentionné quelques cas où les choses ne se rechargeraient pas, ce qui nécessiterait un redémarrage du serveur / de l’application. Mais ces exceptions sont beaucoup moins fréquentes.

Une autre remarque: cela ne fonctionne PAS avec le serveur tiv pivotant intégré ou le serveur VMware vFabric tc fourni avec STS. Pour ces serveurs, il existe une option “Enable Java Agent Reloading (experimental)”, qui utilise l’ancienne version 1.2.0 de Spring Loaded, qui ne fonctionnait pas pour moi.

Dans Eclipse, cliquez sur le projet dans le menu supérieur et assurez-vous que l’option «Générer automatiquement» est sélectionnée. Cela a résolu mon problème. J’exécutais Eclipse avec Tomcat en utilisant mes métadonnées d’espace de travail. J’exécutais également Maven dans un projet de module Web dynamic. Pour vérifier, ajoutez votre application à Tomcat. Démarrez Tomcat depuis Eclipse. Assurez-vous que votre application est déployée et en cours d’exécution. Ouvrez l’onglet Console dans Eclipse. Modifiez votre application. Après quelques secondes, vous devriez voir votre modification automatiquement générée et déployée sur Tomcat.

Plus simple, plus rapide: configurez Eclipse pour générer un fichier WAR lorsque vous construisez; Dans une étape de post-construction, copiez ce fichier WAR dans votre répertoire webapps tomcat. Tomcat reconnaîtra le changement et actualisera le site sans aucun déploiement nécessaire. Notez que ce n’est pas parfait; les utilisateurs utilisant cette application Web peuvent avoir une expérience moins qu’optimale, car Tomcat redémarre l’application Web “sous” eux; mais cela correspond à votre demande.