web-dev-qa-db-fra.com

Intégration de Tomcat et Eclipse en tant qu'environnement de déploiement à chaud

Je souhaite configurer Eclipse et Tomcat de manière intégrée de manière à ce que les modifications apportées à mes JSP et à mes servlets (si possible) soient immédiatement reflétées sans nécessiter de déploiement.

Ok, c’est une de ces questions qui a plein de réponses sur Internet mais qui semblent toutes différentes. (utilisez le plug-in Sysdeo, utilisez le plug-in JBOss, manipulez un Eclipse obsolète, utilisez MyEclipse à la place, etc.) et je ne pouvais pas trouver une ressource définitive à référencer. Donc, pour moi, quelle est la procédure la plus simple et la plus recommandée pour configurer cela?

Cela suppose que Eclipse et Tomcat fonctionnent indépendamment l'un de l'autre. En fait, j'ai réussi à les intégrer de manière non intensive à l'aide des instructions suivantes: http://www.ibm.com/developerworks/opensource/library/os-Eclipse-Tomcat/index.html

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

87
udit

Il y a deux options. 

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

  • ajouter Tomcat à la liste de serveurs
  • faire du projet "projet web dynamique" (via l'assistant de création ou via la section des facettes dans les paramètres)
  • ajouter le projet à Tomcat et configurer son "Assemblée de déploiement"
  • double-cliquez sur Tomcat dans la liste pour ouvrir les configurations
  • Remplacez "Publication" par "Jamais publier automatiquement" (cela signifie que le serveur ne sera pas redémarré lorsque vous appuierez sur Ctrl + s).
  • démarrer Tomcat en mode débogage

Cela reflétera toujours les changements de code mais ne redémarrera pas le serveur.

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

  • configurez le plug-in pour envoyer toutes les classes du directeur bin à WEB-INF/classes de votre installation Tomcat (c'est presque la même chose que pour configurer l'assembly de déploiement)
  • configurer toutes les autres ressources pour aller à leurs emplacements respectifs
  • éventuellement, externaliser tous les chemins absolus des paramètres d'emplacement filesync vers une seule variable et configurer cette variable dans Eclipse (vous pourrez ainsi valider les paramètres filesync si tous les membres utilisent Eclipse)
  • ajoutez Tomcat à la liste des serveurs dans Eclipse, configurez l'option "Emplacements des serveurs" comme "Utiliser l'installation de 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. Chaque changement non structurel est reflété immédiatement, sans redéploiement.

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

72
Bozho

Laissez simplement Eclipse écrire les fichiers de classe directement dans le répertoire $ Tomcat/webapps/MyWebApp/WEB_INF/classes. Ensuite, configurez Apache-Tomcat pour vérifier si les fichiers de classe ont été mis à jour et rechargez-les s'ils le sont. 

Pour configurer Tomcat afin de recharger automatiquement une classe lorsqu'elle change, vous devez 

éditez $Tomcat/conf/context.xml et réglez: 

<Context reloadable="true"> 

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

<web-app reloadable="true">

Je ne me souviens pas si les deux modifications sont nécessaires, mais c'est ainsi que j'ai configuréMy Tomcat-6.0.18 pour le rechargement automatique.

29
Martin Tilsted

Déni de responsabilité: Je ne suis qu'un client heureux, je ne travaille pas pour Zero Turnaround et je ne suis en aucune manière affilié à eux.

Check out JRebel - il vous permet de coder sans redémarrer l’application Web. Cela fonctionne essentiellement en instrumentant vos classes et en adaptant leurs changements. Il traite beaucoup plus de cas que de déployer à chaud , notamment:

  • Ajout/Suppression de méthodes
  • Ajout/suppression de constructeurs
  • Changer d'interface
  • Ajout/suppression d'interfaces implémentées

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

  • Guice
  • Printemps
  • Struts 2

Vous obtenez un essai gratuit tout à fait sans douleur - je vous suggère de tenter le coup. 

8
Robert Munteanu

Changez votre espace de travail dans Eclipse en\Tomcat\webapps Comme c'est juste pour votre travail, cela devrait fonctionner correctement. Quelles que soient les modifications apportées à Eclipse, elles se trouvent dans le même répertoire que Tomcat recherche les applications à déployer.

3
PaganSensei

Dans la vue Serveurs, créez un nouveau serveur, n’ajoutez aucune ressource (projet) au serveur pour le moment . Double-cliquez sur le serveur à l’emplacement du serveur . Choisissez "Utiliser l’installation Tomcat" . Modifier ". Chemin de déploiement "vers le répertoire de déploiement de Tomcat (Ex: c:\server\Tomcat 7.0.14\webapps) . Extension de la section" Publication "" . Cochez la case "Publier automatiquement après un événement de construction" . Enregistrer. et fermez . Dans le menu Eclipse, cochez la case "Projet -> Construire automatiquement" .. Dans la vue Serveurs, cliquez avec le bouton droit de la souris sur votre serveur, "Ajouter et supprimer", publiez votre projet.

3
ticu0000

Pourquoi ne pas utiliser un serveur Tomcat intégré avec dans Eclipse s'il s'agit uniquement d'un développement? Vous pouvez configurer les serveurs sous window-> préférences. Une fois configuré, si vous avez un jsp appelé page.jsp, vous pouvez cliquer dessus avec le bouton droit de la souris et sélectionner Exécuter sur le serveur. Dans les préférences -> Général -> Navigateur Web, vous pouvez choisir la météo pour utiliser le navigateur intégré ou un navigateur externe. Apportez des modifications à votre jsp, enregistrez et actualisez votre page à partir du navigateur. Les modifications seront automatiquement répercutées une fois que vous aurez sauvegardé et actualisé votre navigateur.

2
Jared

Ce qui fonctionne pour moi ici est:

context.xml comme ceci:

<Context path="/myapp" docBase="myapp" debug="5"
    reloadable="false" antiResourceLocking="false" antiJARLocking="true">
<!-- this because i´m using Spring 3.1 with Tomcat -->
    <Loader     loaderClass="org.springframework.instrument.classloading.Tomcat.TomcatInstrumentableClassLoader" />

</Context>

Ensuite, sous l'onglet Serveurs dans Eclipse, sous l'onglet "Modules", j'ai désactivé le "Rechargement automatique" pour tous les modules en cours de déploiement.

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

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

Seulement avec tout cela, j'ai eu plein (VM) classes hot-deploy avec des ressources hot-deploy !!!

2
chuckedw

Dans votre environnement de développement, indiquez simplement à votre serveur Tomcat de rechercher les JSP dans le répertoire dans lequel vous les développez. Dès que vous enregistrez le fichier, vous pourrez voir les modifications.

1
Cameron

peut-on utiliser l'option ci-dessous? Double-cliquez sur Serveur dans Eclipse -> Emplacements de serveur -> Utiliser l'installation de Tomcat . Il prend le contrôle de l'installation de Tomcat . Classes Java.

0
Tushar Sagar

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 aucune synchronisation: le répertoire Tomcat et le répertoire de votre projet seront toujours dans le même répertoire. 

Tomcat détecte périodiquement les modifications et redéploie votre application.

Il existe également un moyen de déboguer votre application, je pense donc humblement que c'est une bonne solution. 

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

0
Raul Luna

Au cas où vous êtes pressé:

  1. cochez "ne jamais publier automatiquement" dans Tomcat (autre conteneur) dans Eclipse.
  2. démarrez Tomcat (autre conteneur) en mode débogage.

le tour est joué! :)

0
Sachin Verma

Ce n'est peut-être pas la meilleure solution, 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 (doit exporter le fichier jar vers le répertoire lib dans $ contextPath)
  • $ eclipseWorkbench/project-jsp /

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

Utilisez le débogage distant dans Eclipse pour Tomcat, qui autorisera un échange de code à chaud limité. Si vous modifiez des champs statiques ou ajoutez des méthodes, vous devrez exporter le fichier jar et redémarrer le contexte.

0
TJR

Dans Eclipse, cliquez sur Projet dans le menu du haut et assurez-vous que «Construire automatiquement» est sélectionné. Cela a résolu mon problème. J'utilisais Eclipse avec Tomcat à l'aide des métadonnées de mon espace de travail. J'exécutais également Maven dans un projet de module Web dynamique. Pour vérifier, ajoutez votre application à Tomcat. Démarrez Tomcat à partir d’Eclipse. Assurez-vous que votre application est déployée et en cours d'exécution. Ouvrez l'onglet Console dans Eclipse. Faites un changement dans votre application. Au bout de quelques secondes, votre modification devrait être automatiquement construite et déployée sur Tomcat.

0
NLessani

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

utilisable sur n'importe quel bytecode pouvant s'exécuter sur une machine virtuelle Java

À l'aide de la configuration suivante, les modifications ont été automatiquement publiées sur une instance Tomcat attachée (méthode habituelle Eclipse WTP). J'utilise Spring Tool Suite 3.7.3 basé sur Eclipse Mars.2 (4.5.2).

  1. Téléchargez la dernière version JAR de Spring Loaded à partir 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 la case "Rechargement automatique des modules par défaut" .
    • Remarque: Si des modules Web ont déjà été ajoutés au serveur, vous devrez peut-être désactiver le "Rechargement automatique" individuellement via l'onglet "Modules" (au 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 de la machine virtuelle": -javaagent:/path/to/downloaded/springloaded-1.2.5.RELEASE.jar -noverify
    • Pour permettre la visualisation des fichiers JAR en plus des fichiers .class du projet, configurez l'argument -Dspringloaded=watchJars= VM par les commentaires de ce problème .

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

Remarque supplémentaire: cela NE fonctionne PAS avec le serveur Pivotal tc intégré ou le serveur VMware vFabric tc fourni avec STS. Pour ces serveurs, il existe une option "Activer le rechargement basé sur un agent Java (expérimental)", mais qui utilise l'ancienne version 1.2.0 de Spring Loaded, qui ne fonctionnait pas pour moi.

0
martian111

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

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

0
matt b