java eclipse tomcat eclipse-wtp hotdeploy

java - Tomcat y Eclipse Zero Turnaround Deployment



eclipse-wtp hotdeploy (3)

Quiero poder implementar cambios de código en Tomcat (casi al instante), mientras estoy desarrollando en Eclipse.

Hasta ahora, tengo mi salida de Eclipse colocando las clases construidas en la carpeta WEB-INF/classes de mi aplicación web.

También tengo un contexto recargable, con el web.xml como un recurso visto. Cualquier edición / guardado en este archivo vuelve a cargar mi aplicación web, demorando solo un segundo, mucho más rápido que crear un nuevo archivo war y desplegarlo por completo.

Sin embargo, lo que me gustaría hacer es activar la redistribución cuando edito cualquier archivo de origen. Como los archivos .class se están modificando en Tomcat, parece que solo necesito monitorear cualquier cambio en la carpeta WEB-INF/classes y sus hijos.

He leído que puedo agregar recursos vistos adicionales en el context.xml de Tomcat, pero esto no parece ser lo que necesito, a menos que sea posible especificar un directorio que se verá (incluyendo el monitoreo recursivo de subcarpetas y archivos).

<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>WEB-INF/someother.file</WatchedResource> <Manager pathname=""/> </Context>

¿Esencialmente, mi pregunta es si puedo ver la carpeta de clases completa (sin incluir explícitamente cada WatchedResource ) para activar un nuevo despliegue en Tomcat?

De lo contrario, ¿puedo configurar Eclipse para que touch el archivo web.xml, cada vez que guardo un archivo de origen en ese proyecto? Estoy desarrollando en un sistema Windows. :(

PD: No estoy interesado en el producto JRebel. Cualquier respuesta debe ser una solución gratuita .

Actualizar

De acuerdo con la documentation Tomcat, la carpeta de clases debe monitorearse configurando el contexto como recargable:

Establézcalo en verdadero si desea que Catalina supervise las clases en / WEB-INF / classes / y / WEB-INF / lib para los cambios, y vuelva a cargar la aplicación web automáticamente si se detecta un cambio.

Solo los cambios en el web.xml parecen activar una recarga. ¿Es esto un error o mi configuración es incorrecta?

Además, he leído acerca de cómo configurar el atributo docBase para un contexto dado:

docBase="webapps/someExample"

Esto parece estar cerca de lo que necesito, ya que luego podría volver a publicar en Eclipse rápidamente. Mi único problema es que necesito que varias aplicaciones web / servlets se ejecuten en Tomcat simultáneamente, en el mismo puerto, etc.


¿Tal vez el Proyecto de herramientas web de Eclipse con auto-despliegue habilitado te ayude? Agregue un servidor, abra las propiedades y en Publicación verá un botón de radio que dice "Publicar automáticamente cuando cambien los recursos". Esto dará lugar a una nueva implementación si las clases cambian, de lo contrario, solo sobrescribe los recursos. Puede instalar WTP a través de un sitio de actualización incorporado (solo Eclipse), así que revise sus actualizaciones de software. ¿Es gratis para la mayoría de los servidores pero no es compatible con ciertas funciones de Websphere?


Para estos casos, establezco la salida de compilación de eclipse en WEB-INF / classes como lo ha hecho y creo un archivo de contexto con la base de documentos establecida en la carpeta de la aplicación web (principal de WEB-INF) en el proyecto. Esto se coloca manualmente en conf / Catalina / localhost (asumiendo configuraciones predeterminadas para algunos elementos de server.xml). El resultado final es que Tomcat termina sirviendo desde el directorio de desarrollo. Entonces, cambie un servlet u otra clase y se actualiza a la carpeta de clases. Guarda un jsp y está disponible de inmediato.

Si el proyecto se estructura como:

src |-main |-webapp |-images |-js |-WEB-INF |-jsp |-classes

Entonces el contexto sería como:

<?xml version="1.0" encoding="UTF-8"?> <Context path="/path" reloadable="true" docBase="<pathtoproject>/src/main/webapp" />


Pruebe el agente JVM con carga de resorte que describí en la siguiente respuesta: https://.com/a/37064672/1034436

Si bien eso ha funcionado con mi aplicación web Spring, debería funcionar con Eclipse + WTP + Tomcat + Dynamic Web Applications de vanilla, ya que Spring Loaded funciona en el nivel de carga de clases / JVM.

Aún deberá usar la opción "Publicar automáticamente cuando cambien los recursos", como lo menciona @toomasr en su respuesta. Sin embargo , también debe desactivar la opción "Recarga automática de módulos por defecto". Si ya ha agregado / publicado módulos de Eclipse a Tomcat, desactive la "Recarga automática" para cada módulo web (a través de la pestaña Módulos de la página de configuración de Tomcat). Eso debería evitar que Tomcat vuelva a cargar la aplicación cuando se actualiza un solo archivo de clase, lo cual sospecho que es el tiempo de recarga / espera.