web-dev-qa-db-fra.com

Application Web Javascript et Java, tout construire en Maven ou utiliser Grunt pour une application Web?)

Nous réalisons 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 nous aimerions bien sûr avec un simple mvn install tout construire (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 réalité. Donc, utiliser différentes méthodes/outils de construction est acceptable.

2) Oubliez Grunt Bower, utilisez les plugins Maven pour construire, exécuter des tests, gérer les dépendances de l’application Web. Si tel est le cas, lesquels?

3) Utilisez le plug-in Maven exec pour appeler Grunt afin de créer l'application Web front-end. Je vois cela plus comme un bidouillage que comme une solution.

4) autre.

Une approche plus facile à intégrer à Jenkins est un plus.

Merci d'avance!

97
void

Après avoir travaillé avec tous les outils de pipeline d’actifs du Java), je suis parvenu à 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 problèmes est qu’ils sont principalement basés sur Rhino (WRO4J en a maintenant quelques Node) et Rhino est un chien lent comparé aux outils basés sur Node). Vous devez également tenir compte du fait que l’outillage JavaScript mûrit rapidement. Vous devez donc rechercher des outils capables d’agir rapidement.

  • WRO4J - Le support est excellent, l'intégration Maven ET Eclipse est excellente, la liste des plugins est vaste et le cadre est suffisamment flexible pour vous permettre d'écrire un plugin pour tout ce dont vous avez besoin. Si vous êtes confiné à un pipeline d'actifs basé sur Java), c'est certainement la voie à suivre. Le problème avec Wro4j est qu'il est lent (même quand il démarre Node processus) par rapport aux Node).
    Pour obtenir des chiffres réels, compiler et concaténer 25 ensembles d’actifs contenant LESS, CSS CoffeeScript et JavaScript prend environ 35 secondes lorsque Rhino est utilisé et environ 15 à l’aide du support de Wro4j Node sur 2013). iMac avec 16 Go de RAM.Utilisez Grunt + Le nœud prend environ 2 secondes sur mon MacBook Air.

  • [~ # ~] jawr [~ # ~] - Les intégrations et la liste des fonctionnalités sont plutôt bonnes, mais la documentation n'est pas excellente et écrit vos propres plugins. peut être un peu délicat. Lorsque j'ai écrit ce billet, JAWR était au milieu d'une interruption de 4 ans, mais est de nouveau en développement actif depuis janvier 2014. Si vous choisissez d'enquêter Java Tools, cela vaut la peine d'être examiné.

Node Based Tooling (intégré aux versions Ant/Maven)

  • Grunt - C'est facile, dispose d'un écosystème de plugins fantastique et la communauté est immense. 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 s’appuie sur la configuration, ce qui facilite grandement l’installation, mais n’est pas le "Node Way". Il est également intéressant de noter que les tâches Grunt ne sont pas facilement composables. Par conséquent, pour un pipeline de génération JavaScript complexe, Grunt peut ne pas être idéal.

  • Gulp - Gulp est l'alternative à la croissance rapide qui remplace Grunt. Son concurrent par défaut 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 la configuration du code. Bien que cela vous donne beaucoup de puissance, il n'est pas idéal pour les équipes qui ne possèdent pas de compétences de base en JavaScript.

Le seul problème potentiel pour les outils basés sur JavaScript est que vous devrez avoir un noeud , npm et grunt-cli / gulp sur n'importe quelle machine cela doit 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 difficile à vendre.

Intégrer cela dans votre projet Maven est assez facile et vous avez pas mal d’options. Vous pouvez utiliser le plugin ant-run Maven , vous pouvez exécuter une tâche ant exec et appelez-le depuis Maven ou, mieux encore, utilisez la tâche maven exec .
Voici le code pour l’intégrer dans le cycle de vie Maven à l’aide du plug-in exec si cela peut aider.

    <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>
73
Baer

Pour ceux qui recherchent toujours plus d'informations sur ce sujet, l'un des créateurs de Yeoman a rédigé un bon article (écrit quelques mois après que cette question a été posée à l'origine), qui développe la réponse originale avec un peu plus de détail:

24
Jeff Smith

Ensuite, il ya aussi le plugin frontend-maven: https://stackoverflow.com/a/19600777/320399 Il télécharge Node et NPM pour vous (localement sur votre projet), télécharge Grunt via ce NPM (géré par ce nœud), puis exécute Grunt (via ce nœud). Il s’auto-initialise automatiquement et vous n'avez pas besoin de Node installé sur la machine pour construire le projet, juste une commande: mvn install.

13
Eirik Sletteberg

Vous voudrez peut-être passer à la caisse http://jhipster.github.io/ : il s’agit d’un générateur Yeoman, qui génère une application dans laquelle Maven, Grunt et Bower travaillent 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.

13
Julien Dubois

après quelques heures passées sur ce problème, je peux dire ceci:

maven et Grunt ne jouent pas bien, mais on peut les faire respecter.

Voici ne description de plugin pour exécuter Grunt via Maven build

j'espère que ça aide :)

4
Nadav Leshem