Pregunta Maven: Cómo utilizar embarcadero: ejecutar en un proyecto Maven de varios módulos, sin necesidad de instalar


Soy nuevo para Maven. Tengo un proyecto multi-módulo maven 2 que tiene la siguiente estructura (algo simplificada):

Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...

Configuré el Módulo web para incluir el Plugin Maven Jetty. Esto funciona muy bien para construir los artefactos de producción. Para el desarrollo, descubrí que necesito llamar mvn install en cualquier módulo que cambie, seguido por el embarcadero y el muelle de llamada: vuelva a ejecutar.
Sería mucho más productivo si hubiera una forma de que el complemento elija cambios directamente de los directorios de destino de cada módulo. De acuerdo con la documentación del plugin jetty, parece haber tal característica, pero parece que esto solo se aplica al módulo WAR.
Aún más importante para mí es poder hacer cambios en los archivos de recursos, sin la necesidad de reiniciar el embarcadero. Esto se debe a que la mayoría de los recursos son archivos de plantilla HTML, y es mucho más productivo diseñar y actualizar las plantillas durante el desarrollo sin necesidad de reiniciar para ver los cambios.

Entonces, ¿hay alguna manera de establecer el classpath del jetty plugin para incluir el target / classes y los directorios de recursos de cada módulo JAR, en lugar de los JAR reales en el repositorio local?

¡Gracias!
Yaniv


23
2017-12-06 21:59


origen


Respuestas:


Esto no es posible con un proyecto Maven de varios módulos. Una de las principales reglas de los proyectos de Maven es que cada proyecto debería ser independiente. Eso no impide que se construyan juntos, pero cualquier proyecto debería poder construirse por sí mismo siempre que se satisfagan todas sus dependencias.

En este caso, significa que el proyecto WAR no puede mirar hacia los otros proyectos para ver si necesitan ser actualizados, el POM para esos otros proyectos es la declaración definitiva de lo que se necesita hacer para construir el artefacto. Y una vez que se construye el artefacto, se coloca en el repositorio local. No existe una asociación entre los archivos de origen y el artefacto en ese punto, por lo que no hay forma de saber qué archivos fuente desencadenarían una reconstrucción del artefacto del que depende el WAR.


7
2017-12-07 03:33



En Eclipse, puede usar el complemento "Run Jetty" para lograr esto.
En la Configuración de ejecución de IDEA, hay una opción 'Resolver artefactos del espacio de trabajo', verifíquelo.


3
2017-07-16 07:10



Si usa M2Eclipse (complemento de Eclipse para una estrecha integración de Maven dentro de Eclipse), puede ejecutar su jetty: objetivo de ejecución en el módulo web y otras dependencias se tendrán en cuenta desde su espacio de trabajo, incluso si no se encuentran en absoluto. disponible en su repositorio local.

Solo hay una opción en su ejecución para decirle a Maven que resuelva sus módulos en el propio espacio de trabajo (de manera predeterminada, simplemente obtendría lo que se implementa en el repositorio local).

Desafortunadamente, no puedo tener el mismo comportamiento en IDEA y tengo que ejecutar una instalación antes de ejecutar el embarcadero: ejecutar en el módulo web.


2
2018-02-10 19:03



Basado en esta respuesta:Best practice wrt. `mvn install`, proyectos de varios módulos y la ejecución de un submóduloUna solución alrededor de las horribles restricciones y limitaciones del reactor de Mavens es definir el plugin en el pom padre con skip true, y luego volver a habilitarlo en el submódulo respectivo usando skip false.


1
2018-03-24 12:19



Lo resolví usando un launcher maven y configurando Resolver artefactos del espacio de trabajo,  eso no está marcado por defecto enter image description here


1
2017-11-01 02:29