97 votes

L’application web JavaScript et Java server, construire dans Maven ou utiliser Grunt pour web app ?

Nous faisons une application web avec AngularJS et nous aimons l'idée d'utiliser la Charmille pour la Gestion de la Dépendance et de Grunt pour la construction, l'exécution des tests, etc. (Yeoman)

Le serveur est fait avec Java à l'aide de Maven, si nous voulons bien sûr avec un simple mvn install tout construire (application web + serveur)

Donc, ce que l'approche que vous avez fait et pourquoi?

1) les Traiter comme deux applications différentes, ce qui en fait ils sont. Donc, en utilisant différentes méthodes de construction/outils est acceptable.

2) Oublier Bower, Grunt, utiliser des plugins Maven pour construire, exécuter des tests, de gérer les dépendances de l'application web. Si c'est le cas, lesquels?

3) l'Utilisation de Maven plugin exec pour appeler Grunt pour construire le front-end d'une webapp. Je vois cela plus comme un hack qu'une solution.

4) d'Autres.

Approche facilite l'intégration avec Jenkins est un plus.

Merci à l'avance!

73voto

Baer Points 913

Après avoir travaillé avec chaque asset pipeline de l'outil dans le toolkit Java depuis un moment je suis arrivé à quelques conclusions:

Basé Sur Java Outillage

Il y a une poignée d'outils là-bas, mais les plus populaires sont JAWR et Wro4J. Le plus gros problème avec ces derniers est qu'ils sont pour la plupart Rhino base (WRO4J a maintenant une prise en charge des nœuds) et Rhino est chien lent par rapport à un Nœud en fonction des outils. Vous avez également à considérer que le JavaScript de l'outillage est rapidement échéance de sorte que vous devriez être à la recherche pour les outils qui peuvent se déplacer rapidement.

  • WRO4J - Support est grand, Maven ET Eclipse intégration sont de grands la liste des plugins est vaste et le cadre est suffisamment souple qu'avec un peu d'huile de coude, vous pouvez écrire un plugin pour ce que vous avez besoin. Si vous êtes confiné à un basé sur Java asset pipeline est certainement le chemin à parcourir. Le problème avec Wro4j est qu'il est lent ( même quand il débute Nœud de processus ) par rapport à Nœud en fonction des outils.
    Pour donner quelques vrais chiffres de la compilation et de la concaténation de 25 actifs bundles contenant MOINS, CSS, JavaScript, CoffeeScript et prend environ 35 lors de l'utilisation de Rhino et ~15s à l'aide de Wro4j de la prise en charge des nœuds sur un iMac 2013 avec 16G de RAM. À l'aide de Grunt+Nœud prend environ 2s sur mon chétif MacBook Air.

  • JAWR - de L'intégration et de la fonctionnalité de liste sont assez bon, mais les docs ne sont pas de grands et de l'écriture de vos propres plug-ins peut être un peu délicat. Quand j'ai d'abord écrit ce post JAWR était au milieu de 4 ans de hiatus, mais est maintenant de retour en cours de développement, à partir de janvier 2014. Si vous choisissez d'étudier des Outils Java cela vaut la peine de l'enquête.

Nœud en Fonction de l'Outillage (intégré avec Ant/Maven Construit)

  • Grunt - C'est facile, a un excellent plugin de l'écosystème et de la communauté est énorme. Si il ya quelque chose que vous devez faire, vous pouvez parier qu'il y est un plugin pour elle - même, éventuellement, celle écrite par les créateurs de grunt. Les principales critiques de Grunt, c'est d'être dirigé par une configuration qui permet une installation facile, mais n'est pas le "Nœud." Il est également intéressant de mentionner que Grunt tâches ne sont pas facilement modulable pour un JavaScript complexe à élaborer un portefeuille Grunt peut-être pas idéal.

  • Gulp - Gulp est la croissance rapide de remplacement de Grunt. Ses concurrentes par défaut et utilise les flux d'éviter temporaire écrit pour le système de fichiers qui peuvent considérablement augmenter la vitesse de votre build. Gulp est très idiomatiques et met l'accent sur le code de > configuration, et bien que cela vous donne beaucoup de puissance, il n'est pas idéal pour les équipes qui n'ont pas les compétences de base en JavaScript.

Le seul potentiel de raccrocher pour JavaScript en fonction de l'outillage, c'est que vous aurez à faire le Nœud, mnp et grunt-cli/gulp sur toute machine qui a besoin de faire la compilation. Si vous n'avez pas accès à votre de CI, de machines ou ne sont pas à l'aide de l'artefact en fonction déploie cela peut être dur à vendre.

L'intégrer dans votre projet Maven est assez facile et vous avez quelques options. Vous pouvez utiliser le Maven ant-run plugin, vous pouvez exécuter une fourmi exec de la tâche et de l'appeler à partir de Maven ou, mieux encore, vous pouvez simplement utiliser le maven exec tâche.
Ci-dessous est le code à intégrer dans le cycle de vie de Maven en utilisant le plugin exec si c'est utile à personne.

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

24voto

Jeff Smith Points 403

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 la formulation de cette question) qui développe la réponse originale avec un peu plus de détail:

13voto

Julien Dubois Points 911

Vous voudrez peut-être consulter 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.

13voto

Il y a aussi le frontend-maven-plugin : http://stackoverflow.com/a/19600777/320399 il télécharge nœud et NGP pour vous (localement à votre projet), téléchargements de Grunt via cette NGP (géré par ce nœud), puis exécute Grunt (via ce nœud). C’est l’amorçage, et vous n’avez pas besoin de noeud installé sur l’ordinateur pour générer le projet. Juste une commande ; MVN install.

4voto

Nadav Dav Points 130

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

Maven et grognement ne jouent pas bien, mais elle peut être appliquée...

Voici une description du plugin pour l’exécution de Grunt via Maven construire

J’espère que cette aide  :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X