12
votes

Eclipse + Tomcat - Servez WebApp directement à partir de l'espace de travail

Quel est le moyen idéal de configurer Tomcat pour servir directement à partir de l'annuaire de mon projet à l'intérieur de mon espace de travail? ( associé )

Je veux que mes ressources Web statiques sont instantanément disponibles à tout moment, je leur modifiais sans avoir à les publier dans un répertoire distinct. Il semble que la meilleure façon d'accomplir est de servir des fichiers directement plutôt que d'une copie publiée / déployée du fichier.


Alternativement, je suis ouvert à d'autres options (différents serveurs d'applications ou IDes) qui permettent de développer des applications Web Java beaucoup plus rapidement. Publier et redéployer chaque petit changement consiste à manger trop de temps.

J'ai essayé Jrebel et Filesync (et ils travaillent tous les deux dans un certain degré) mais ils essaient de corriger un problème qui ne devrait pas exister.


0 commentaires

9 Réponses :


0
votes

Par défaut, il partage uniquement les applications situées dans $ catalina_home / webapps . Vous pouvez le changer dans le $ catalina_base / conf / conf / server.xml dans le .

vérifier le Documentation pour attribut appbase < / code>.

J'espère que cela a aidé.


0 commentaires

-1
votes

Normalement WebApplications sont hébergés dans le répertoire WebApps, mais il est également possible de configurer un répertoire externe en tant que répertoire hôte WebApplication de Tomcat. Vous pouvez simplement définir votre répertoire de sortie de projet Eclipse Workspace comme base d'applications. Cela peut être fait soit à l'aide de la demande de gestionnaire de Tomcat pour déployer une application à partir d'un répertoire externe, soit en modifiant simplement Server.xml (qui est sous Conf répertoire) pour définir votre application comme ci-dessous:

....

<Context docBase="D:\your\eclipse\workspace\project\WebContent" path="/projectbaseurl"   reloadable="true"/>

</Host>
</Engine>
</Service>
</Server>


0 commentaires

2
votes

On ne sait pas si vous utilisez l'approche Eclipse WTP avec Tomcat ou une stratégie de déploiement personnalisée.

Je suis éteint de courir Tomcat dans Eclipse en raison de la réédition peu fiable des pots modifiés. J'utilise maintenant la jetée via le plug-in Eclipse Exécuter Jetty Exécutif (disponible sur le marché Eclipse). Cela semble être exécuté à partir de l'espace de travail et ne fait pas l'approche de la republie-to-a-deployment-répertoire que Eclipse utilise avec Tomcat.

Vous n'obtenez pas de rechargement de code dynamique avec cette option, mais vous pouvez ajouter cette fonctionnalité avec Jrebel.

Aller plus loin sur le champ gauche, passez à une langue / cadre JVM qui prend en charge la vue de vos modifications instantanément sans ré-édition / redémarrer, telle que:

  • Jouer 2 (Scala et Java)
  • GRAVES (GROOVY)
  • vert.x (différentes langages JVM).

2 commentaires

Vous avez raison - j'utilise une approche Eclipse WTP avec Tomcat et cela ne fonctionne tout simplement pas (nous ne pouvons plus être amis). Ne pas avoir rechargé de code dynamique n'est pas une grosse préoccupation. Je suis beaucoup plus intéressé à ne pas publier constamment à publier des fichiers non compilés. Cela ressemble à une bonne option. Savez-vous si l'application sera toujours portable entre Jetty / Tomcat (et tout autre serveur d'applications)?


Oui, je développe avec jetée, mais nous nous déployons sur Tomcat (c'est toujours un fichier de guerre que nous construisons / déployez).



9
votes

Je n'ai jamais vraiment aimé le plugin WTP qui est emballé avec Eclipse.

Dans le passé, j'ai eu beaucoup de succès avec le Sysdeo Tomcat Plugin pour Eclipse .

Il utilise les classes compilées que Eclipse construit pour vous, de sorte que lorsque vous effectuez un changement compatible avec interface (comme changer certaines choses à l'intérieur d'une méthode), ceci est déployé immédiatement sans nécessiter de redémarrage. Changer les signatures de méthode ou l'ajout de nouvelles méthodes au sein d'une classe nécessitent un redémarrage, mais comme il n'y a pas de long étape de construction de la guerre, tout le cycle de construction / déploiement est de toute façon réduit.

En outre, le plug-in SYSDEO utilise les actifs statiques de votre espace de travail, donc pas besoin de copier ou de les déployer. Il suffit de changer, de rafraîchir votre navigateur et de voir le changement tout de suite.

Malheureusement, il semble que le développement du plug-in à une halte il y a quelques années. La dernière version prise en charge de Eclipse, selon la matrice sur son site Web, est de 3,6. Selon Cette page Cependant, le plugin fonctionne toujours avec Eclipse 4.2 (Juno).

J'espère que cela vous aidera. Utiliser Sysdeo est vraiment une expérience beaucoup plus agréable que WTP!


1 commentaires

Cela semble être une bonne option - la seule chose qui me concerne est le soutien à l'avenir.



1
votes

Je suggère d'utiliser sbt ainsi que son plugin Web.

La caractéristique clé de sbt est le mode d'intégration continue : ce moyen essentiellement, sbt déclenche une commande si un fichier change. < / p>

SO NORMAL SBT Les commandes (liées au plug-in Web) sont

Conteneur: Démarrer
Conteneur: Arrêtez
Conteneur: Recharger / ... Conteneur: Recharger

mais en l'utilisant dans le mode d'intégration continue (une commande commençant par ~ )

~; conteneur: début; Conteneur: Recharger /

Il rechargera automatiquement une application Web lorsque le code source ou tout autre fichier a changé .

Donc, je viens de sauvegarder des servlets, des sources Java, Scala Sources tout et appuyez sur Recharger dans le navigateur, et que économise vraiment beaucoup de temps . .

C'est le sentiment de greils, mais avec Java comme langue de programmation principale.

Informations supplémentaires

  • j'ai sbt en cours d'exécution dans un terminal (je ne suis pas au courant s'il existe un plugin pour Eclipse pour la démarrer à partir de Eclipse)
  • sbt peut compiler à la fois des projets Java et Scala hors de la boîte.
  • Le plugin Web utilise jetty (je ne suis pas au courant s'il est possible d'incorporer tomcat aussi)
  • Il n'est pas nécessaire de connaître Scala pour configurer sbt , mais vous devriez lire le didacticiel.
  • Cette solution n'est pas liée à l'IDE; Il fonctionne donc sans une IDE également (juste de la ligne de commande).

1 commentaires

Downvoter, s'il vous plaît ajouter un commentaire. La question a été explicitement ouverte à "Autres options (serveurs d'applications)".



5
votes

Je suis sûr que Maven peut faire ce genre de choses. Peut-être qu'il y a même des archétypes pour Tomcat qui ont ce type de comportement déjà configuré.

J'utilise un archétype maven avec JBoss comme. Lorsque je change de fichier .CS ou de mon fichier .xhtml ou de toute autre ressource statique et enregistrez-la dans Eclipse, les ressources sont immédiatement synchronisées avec mon déploiement.

EDIT:

Voici un tutoriel rapide pour ma solution:

Qu'est-ce que j'utilise:

  • JBoss As 7.1.1
  • Eclipse Juno pour les développeurs Java EE

    Les versions plus anciennes ou plus récentes doivent également faire le travail.

    1. Installez JBoss Tools Plug-in sur le marché Eclipse dans Eclipse Ide

      Cela installera plusieurs plug-ins dans votre IDE, comme le jboss comme connecteur de serveur ou Maven.
    2. Ajouter des référentiels JBoss à votre configuration maven
      fenêtre -> Préférences -> Maven -> Paramètres de l'utilisateur -> Fichier ouvert

      Ajoutez les référentiels de JBoss Maven Commencer
    3. Ajouter un serveur JBoss Server
      fenêtre -> Préférences -> Serveurs -> Environnements d'exécution
      Suivez l'assistant, jolie standard
    4. Ajoutez une ServerInstance de l'onglet Serveurs Eclipse
    5. créer un nouveau projet Maven
      Veillez à ce que la case à cocher crée un projet simple (sauter l'archétype) est pas vérifié
      Choisissez l'archétype jboss-javaee6-webapp-vierge-archétype 7.1.3.cr7

      archétype

      Maintenant, votre projet est prêt à partir :)


2 commentaires

Des sons prometteurs, avez-vous un exemple?


Cela copie toujours le changé .CSS ou .xhtml à un répertoire de déploiement sur Sauvegarder, correct?



5
votes

Je ne veux pas sortir comme promouvoir quoi que ce soit, mais Netbeans IDE prend en charge tous ces éléments de la boîte, pas de plug-ins nécessaire, il comprend également un pré-configuré Tomcat;

Il prend en charge la copie des ressources statiques sur la sauvegarde. Il n'est donc pas nécessaire de reconstruire toute votre demande:

Entrez la description de l'image ici

Comme pour tout changement Java, si vous êtes en mode de débogage, il y a un bouton Appliquer des modifications du code , qui reconstruire et déployera vos fichiers modifiés (en supposant que aucun changement structurel n'a été apporté)

ou utilisez également JREBEL (pour le déploiement de fichiers Java modifiés) qui possède d'excellentes fonctionnalités


4 commentaires

Je vais bien, essayez toute configuration, mais cela ressemble à "Copier les ressources statiques sur SAVE" est similaire à la configuration Eclipse / Tomcat / WTP que j'ai maintenant sur laquelle il "publie automatiquement" (AKA Copies) à un répertoire distinct. Normalement, il faut 5 à 10 secondes pour reconnaître que la copie (et un rafraîchissement du navigateur de couple) qui est la position actuelle que je suis en ce moment. Notez-vous un délai de retard entre économie et voir les modifications apportées à votre navigateur?


Pas du tout, j'utilise actuellement Eclipse en ce moment (étant forcé par ma compagnie), mais j'ai été habitué à Netbeans depuis 5 ans, j'ai essayé tout imaginable pour rendre Eclipse se comporter de la façon dont je suis habitué (temps de réponse rapide lors de l'épargne) mais ne pouvait pas le faire correctement. De toute façon, votre meilleur pari est de vérifier par vous-même, je n'ai jamais attendu plus de 2-3 secondes pour une économie pour refléter avec NetBeans. J'ai aussi besoin de noter que le projet était grand :)


désolé de tomber, mais je voulais juste entendre si vous avez eu du succès avec cela?


Pas de problème, je n'ai pas encore essayé. Je suis une sorte de bummed, il n'y avait pas de meilleur moyen de servir une application directement à partir du répertoire source (comme vous le feriez en PHP). J'ai un peu accepté que les applications Java doivent être déployées dans un répertoire distinct.



1
votes

Cela dépend de la question de savoir si vous vous opposez à une action, comme frapper la publication, ou si vous vous opposez à la copie se produisant même s'il est transparent. Le contenu statique comme CSS, HTML ou JavaScript doit être automatiquement déployé (c'est-à-dire copié) lorsque vous enregistrez, en supposant que vous avez «publier automatiquement lorsque les ressources changent» sous «Publication» sélectionnée dans la configuration du serveur de Tomcat. Vous devez vous rafraîchir dans votre navigateur et voir les modifications, sauf une mise en cache de navigateur.

Si vous voulez vraiment que Tomcat ait l'air directement dans les fichiers statiques de votre projet, puis courez Tomcat sans rien déployé (à moins que vous ne disposiez de classes Java à déployer dans le même Projet) et modifier le fichier serveur.xml sous serveurs > Apache tomcat v7.0 à localhost-config < / Code> Éléments sous hôte comme ceci: xxx


0 commentaires

0
votes

Utilisez Grizzly Webserver. Il est entièrement mis en œuvre dans Java, vous disposez donc d'une indépendance complète de platform et vous pouvez la démarrer directement à partir de votre espace de travail sans configurer aucun programme externe. Il est facile de déployer des ressources statilement. Vous devez juste dériver javax.ws.rs.core.application code> et ajouter vos ressources comme dans l'exemple.

private static GrizzlyWebServer getServer(int port,
    String webResourcesPath, String contextPath) {
    GrizzlyWebServer gws = new GrizzlyWebServer(port, webResourcesPath);

    ServletAdapter sa = new ServletAdapter();

    /* here they are added statically */
    sa.addInitParameter("javax.ws.rs.Application", "com.rest.MyApplication");


    sa.setContextPath(contextPath);
    sa.setServletInstance(new ServletContainer());
    sa.setProperty("load-on-startup", 1);
    gws.addGrizzlyAdapter(sa, new String[] { contextPath });

    return gws;


0 commentaires