Nous faisons une application Web avec AngularJS et nous aimons l'idée d'utiliser Bower pour la gestion des dépendances et Grunt pour la construction, l'exécution de tests, etc. ( Yeoman )
Le serveur est fait avec Java en utilisant Maven, donc bien sûr nous aimerions avec un tout simple mvn install
build (application web + serveur)
Alors, quelle approche avez-vous adoptée et pourquoi?
1) Traitez-les comme deux applications différentes, ce qu'elles sont en fait. Il est donc acceptable d'utiliser différentes méthodes / outils de construction.
2) Oubliez Grunt Bower, utilisez les plugins Maven pour créer, exécuter des tests, gérer les dépendances pour l'application Web. Si tel est le cas, lesquels?
3) Utilisez le plugin exécutable Maven pour appeler Grunt afin de créer l'application web frontale. Je vois cela plus comme un hack qu'une solution.
4) Autre.
Une approche plus facile à intégrer avec Jenkins est un plus.
Merci d'avance!
Réponses:
Après avoir travaillé avec tous les outils de pipeline d'actifs dans la boîte à outils Java pendant un certain temps, je suis arrivé à quelques conclusions:
Outillage basé sur Java
Il existe une poignée d'outils, mais les plus populaires sont JAWR et Wro4J. Le plus gros problème avec ces deux éléments est qu'ils sont principalement basés sur Rhino (WRO4J a maintenant un support Node) et Rhino est lent par rapport aux outils basés sur Node. Vous devez également tenir compte du fait que les outils JavaScript mûrissent rapidement, vous devez donc rechercher des outils capables d'évoluer rapidement.
WRO4J - Le support est excellent, l'intégration Maven AND Eclipse est excellente, la liste des plugins est longue et le cadre est suffisamment flexible pour qu'avec un peu d'huile de coude, vous puissiez écrire un plugin pour tout ce dont vous avez besoin. Si vous êtes confiné à un pipeline d'actifs basé sur Java, c'est à coup sûr la voie à suivre. Le problème avec Wro4j est qu'il est lent (même lorsqu'il lance les processus Node) par rapport aux outils basés sur Node.
Pour donner des chiffres réels, la compilation et la concaténation de 25 bundles d'actifs contenant LESS, CSS CoffeeScript et JavaScript prend environ 35 s lors de l'utilisation de Rhino et environ 15 s avec le support Node de Wro4j sur un iMac 2013 avec 16 Go de RAM. Utiliser Grunt + Node prend environ 2 secondes sur mon petit MacBook Air.
JAWR - Les intégrations et la liste des fonctionnalités sont plutôt bonnes, mais les documents ne sont pas excellents et l'écriture de vos propres plugins peut être un peu délicate. Quand j'ai écrit cet article, JAWR était au milieu d'une interruption de 4 ans, mais est maintenant de nouveau en développement actif à partir de janvier 2014. Si vous choisissez d'étudier les outils Java, cela vaut la peine d'être étudié.
Outillage basé sur les nœuds (intégré à Ant / Maven Builds)
Grunt - C'est facile, a un fantastique écosystème de plugins et la communauté est massive. S'il y a quelque chose que vous devez faire, vous pouvez parier qu'il existe un plugin pour cela - peut-être même un écrit par les créateurs de grunt. Les principales critiques de Grunt sont qu'il est basé sur la configuration, ce qui facilite grandement la configuration, mais ce n'est pas le "Node Way". Il convient également de mentionner que les tâches Grunt ne sont pas facilement composables, donc pour un pipeline de construction JavaScript complexe, Grunt peut ne pas être idéal.
Gulp - Gulp est l'alternative à croissance rapide à Grunt. Il est simultané par défaut et utilise des flux pour éviter les écritures temporaires dans le système de fichiers, ce qui peut considérablement accélérer votre construction. Gulp est très idiomatique et met l'accent sur le code> la configuration et bien que cela vous donne beaucoup de puissance, ce n'est pas idéal pour les équipes qui n'ont pas une compétence de base en JavaScript.
Le seul problème potentiel pour les outils basés sur JavaScript est que vous devrez avoir Node , npm et grunt-cli / gulp sur toute machine qui a besoin de faire la compilation. Si vous n'avez pas accès à vos machines CI ou n'utilisez pas de déploiements basés sur des artefacts, cela peut être une vente difficile.
L'intégration de cela dans votre projet Maven est assez simple et vous avez de nombreuses options. Vous pouvez utiliser le plugin ant-run Maven , vous pouvez exécuter une tâche exécutable ant et l'appeler depuis Maven ou mieux encore vous pouvez simplement utiliser la tâche exécutable maven .
Vous trouverez ci-dessous le code pour intégrer cela dans le cycle de vie de Maven à l'aide du plugin exec si cela est utile à quiconque.
la source
Maven
génération si lagrunt
génération échoue?Pour tous ceux qui recherchent encore plus d'informations sur ce sujet, l'un des créateurs de Yeoman a un bon article (écrit quelques mois après que cette question ait été initialement posée) qui développe la réponse originale avec un peu plus de détails:
la source
Ensuite, il y a aussi le frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 Il télécharge Node et NPM pour vous (localement dans votre projet), télécharge Grunt via ce NPM (exécuté par ce Node), puis lance Grunt (via ce nœud). C'est auto-bootstrap et vous n'avez pas besoin de Node installé sur la machine pour construire le projet. Juste une commande; mvn installer.
la source
Vous voudrez peut-être vérifier http://jhipster.github.io/ : c'est un générateur Yeoman, qui génère une application dans laquelle Maven, Grunt et Bower fonctionnent tous ensemble.
C'est un peu comme votre troisième option, mais tout est configuré pour vous, ce qui n'est pas si simple. Il génère également les services de base AngularJS et Java REST pour vous.
la source
après quelques heures passées sur ce problème, je peux dire ceci:
maven et grunt ne jouent pas bien, mais cela peut être appliqué.
Voici une description du plugin pour exécuter Grunt via la version Maven
J'espère que ça aide :)
la source