Aplicación web Javascript y servidor Java, compilar todo en Maven o usar Grunt para la aplicación web.
build angularjs (5)
Estamos haciendo una aplicación web con AngularJS y nos gusta la idea de usar Bower para Dependency Management y Grunt para construir, ejecutar pruebas, etc. ( Yeoman )
El servidor está hecho con Java usando Maven, así que por supuesto nos gustaría con una simple mvn install
compilar todo (aplicación web + servidor)
Entonces, ¿qué enfoque tomaste y por qué?
1) Trátelos como dos aplicaciones diferentes, que de hecho lo son. Entonces, usar diferentes métodos / herramientas de construcción es aceptable.
2) Olvídese de Grunt Bower, use los plugins de Maven para compilar, ejecutar pruebas, administrar dependencias para la aplicación web. Si ese es el caso, ¿cuáles?
3) Use el complemento Maven para solicitarle a Grunt que cree la aplicación de aplicaciones web. Veo esto más como un truco que como una solución.
4) Otro.
El enfoque más fácil de integrar con Jenkins es una ventaja.
¡Gracias por adelantado!
Después de trabajar con cada herramienta de canalización de activos en el kit de herramientas de Java por un tiempo, he llegado a algunas conclusiones:
Herramientas basadas en Java
Hay un puñado de herramientas, pero las más populares son JAWR y Wro4J. El mayor problema con ambos es que en su mayoría están basados en Rhino (WRO4J ahora tiene soporte para Node) y Rhino es lento en comparación con las herramientas basadas en Node. También debe tener en cuenta que las herramientas de JavaScript están madurando rápidamente, por lo que debería buscar herramientas que puedan moverse rápidamente.
WRO4J : la compatibilidad es excelente, la integración de Maven y Eclipse es excelente, la lista de complementos es extensa y el marco es lo suficientemente flexible para que con un poco de esfuerzo pueda escribir un complemento para lo que necesite. Si está confinado a una cartera de activos basada en Java, este es sin duda el camino a seguir. El problema con Wro4j es que es lento (incluso cuando inicia procesos de nodo) relativo a las herramientas basadas en nodo.
Para dar algunos números del mundo real que compilan y concatenan 25 paquetes de activos que contienen LESS, CSS CoffeeScript y JavaScript toman aproximadamente ~ 35s cuando se usa Rhino y ~ 15s usando el soporte de Nodo de Wro4j en un iMac 2013 con 16G de RAM. Usar Grunt + Node toma alrededor de 2s en mi diminuta MacBook Air.JAWR : las integraciones y la lista de características son bastante buenas, pero los documentos no son geniales y escribir tus propios complementos puede ser un poco complicado. Cuando originalmente escribí esta publicación, JAWR estaba en medio de una pausa de 4 años, pero ahora está de nuevo en desarrollo activo a partir de enero de 2014. Si decide investigar las herramientas de Java, vale la pena investigar.
Herramientas basadas en nodo (integradas con Ant / Maven Builds)
Grunt : es fácil, tiene un fantástico ecosistema de complementos y la comunidad es enorme. Si hay algo que necesitas hacer, puedes apostar que hay un complemento para él, posiblemente incluso uno escrito por los creadores de ronco. Las principales críticas de Grunt son que está basado en la configuración, lo que facilita la configuración, pero no es el "Node Way". También vale la pena mencionar que las tareas de Grunt no se pueden componer fácilmente, por lo que para una compleja compilación de JavaScript, Grunt podría no ser ideal.
Gulp - Gulp es la alternativa de crecimiento rápido a Grunt. Es concurrente de forma predeterminada y utiliza transmisiones para evitar escrituras temporales en el sistema de archivos, lo que puede acelerar considerablemente su compilación. Gulp es muy idiomático y tiene un énfasis en la configuración del código> y aunque esto le da mucho poder, no es ideal para los equipos que no tienen una competencia básica en JavaScript.
El único npm potencial para las herramientas basadas en JavaScript es que tendrá que tener Node , npm y grunt-cli / gulp en cualquier máquina que necesite hacer la compilación. Si no tiene acceso a sus máquinas CI o no está utilizando despliegues basados en artefactos, esto puede ser difícil de vender.
Integrar esto en su proyecto Maven es bastante fácil y tiene bastantes opciones. Puedes usar el plugin Maven ant-run , puedes ejecutar una tarea ant exec y llamarlo desde Maven o lo mejor de todo es que puedes usar la tarea maven exec .
A continuación se muestra el código para integrar esto en el ciclo de vida de Maven utilizando el complemento de ejecución si esto es útil para cualquier persona.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>grunt</executable>
</configuration>
</plugin>
Es posible que desee comprobar http://jhipster.github.io/ : es un generador Yeoman, que genera una aplicación que tiene a Maven, Grunt y Bower trabajando juntos.
Es un poco como su tercera opción, pero todo está configurado para usted, que no es tan fácil. También está generando los servicios básicos de AngularJS y Java REST para usted.
Luego, también está el complemento frontend-maven: https://.com/a/19600777/320399 Descarga Nodo y NPM para usted (localmente para su proyecto), descarga Grunt a través de ese NPM (dirigido por ese Nodo) y luego ejecuta Grunt (a través de ese nodo). Es auto-bootstrapping, y no necesita Node instalado en la máquina para construir el proyecto. Solo un comando; mvn install.
Para cualquiera que esté buscando más información sobre este tema, uno de los creadores de Yeoman tiene un buen artículo (escrito unos meses después de que esta pregunta fue hecha originalmente) que amplía la respuesta original con un poco más de detalle:
después de algunas horas dedicadas a este problema, puedo decir esto:
maven y gruñido no juegan bien, pero se puede aplicar ...
Aquí está una descripción del complemento para ejecutar Grunt vía Maven build
espero que esto ayude :)