Maven: Cómo utilizar embarcadero: ejecutar en un proyecto Maven multi-módulo, sin necesidad de instalar

StackOverflow https://stackoverflow.com/questions/4371373

Pregunta

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

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

He configurado el módulo web para incluir el Maven embarcadero plug-in . Esto funciona muy bien para la construcción de los artefactos de producción. Para el desarrollo, descubrí que tengo que mvn install llamada en cualquier módulo que el cambio I, seguido por parando muelle y embarcadero llamar:.
correr de nuevo Sería mucho más productivo si había una manera para que el plugin para recoger los cambios directamente desde directorios de destino de cada módulo. De acuerdo con la documentación para plugins embarcadero parece que hay una característica, pero parece que esto sólo se aplica al módulo WAR.
Aún más importante para mí es ser capaz de realizar cambios en los archivos de recursos, sin la necesidad de reiniciar el embarcadero. Eso es porque la mayoría de los recursos son HTML plantilla archivos, y es enormemente más productivo para diseñar y actualizar las plantillas durante el desarrollo sin necesidad de reiniciar para ver los cambios.

Entonces, ¿hay una manera de establecer la ruta de clase del plugin embarcadero para incluir los target / classes y directorios de recursos de cada módulo JAR, en lugar de los JAR reales en el repositorio local?

Gracias!
Yaniv

¿Fue útil?

Solución

Esto no es posible con un proyecto Maven multi-módulo. Una regla cardinal de proyectos Maven es que cada proyecto debe ser capaz de estar solo. Eso no impide que constituyan construido juntos, pero cualquier proyecto debe ser capaz de construir por sí mismo, siempre y cuando se cumplan todas sus dependencias.

En este caso, significa que el proyecto de guerra no puede mirar hacia fuera a los otros proyectos para ver si necesitan ser actualizados, el POM para aquellos otros proyectos son la declaración definitiva de lo que hay que hacer para construir el artefacto. Y una vez que el artefacto se construye, se pone en el repositorio local. No existe una asociación entre los archivos de origen y el artefacto en ese momento, así que no hay forma de saber qué archivos de origen daría lugar a una reconstrucción del artefacto que la guerra depende.

Otros consejos

En Eclipse, puede utilizar "Ejecutar embarcadero" plugin para lograrlo.
En Configuración de ejecución de IDEA, hay una opción 'artefactos' Resolver espacio de trabajo, lo comprueba.

Si utiliza M2Eclipse (Eclipse plug-in para una estrecha integración de Maven dentro de Eclipse), puede ejecutar su amarre: se tendrá en cuenta meta carrera en el módulo web y otras dependencias de su espacio de trabajo, incluso si están no en todos disponibles en su repositorio local.

No es sólo una opción en su carrera para decirle a Maven para resolver sus módulos en el mismo espacio de trabajo (por defecto, que sería sólo ir a buscar lo que se desplegó en el repositorio local).

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

En base a esta respuesta: La mejor práctica WRT. `Install` MVN, proyectos de varios módulos, y ejecutar uno submódulo una solución alrededor de Mavens restricciones horrible y limitaciones del reactor es definir el plugin en el pom padre con omitir verdadera, y luego volver a activar en el respectivo submódulo usando skip falsa.

Me resuelto mediante el uso de un experto lanzador y configuración Resolver los artefactos de espacio de trabajo , que no está marcada por defecto introducir descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top