Wir machen eine Webanwendung mit AngularJS und wir mögen die Idee, Bower für das Abhängigkeitsmanagement und Grunt zum Erstellen, Ausführen von Tests usw. zu verwenden ( Yeoman )
Der Server wird mit Java unter Verwendung von Maven erstellt, daher möchten wir natürlich mit einem einfachen mvn install
Build alles (Webanwendung + Server)
Welchen Ansatz haben Sie gewählt und warum?
1) Behandle sie als zwei verschiedene Anwendungen, die sie tatsächlich sind. Die Verwendung unterschiedlicher Bauweisen / Werkzeuge ist daher akzeptabel.
2) Vergessen Sie Grunt Bower, verwenden Sie Maven-Plugins zum Erstellen, Ausführen von Tests und Verwalten von Abhängigkeiten für die Webanwendung. Wenn das der Fall ist, welche?
3) Verwenden Sie das Maven Exec-Plugin, um Grunt aufzurufen und die Front-End-Webanwendung zu erstellen. Ich sehe das eher als Hack als als Lösung.
4) Andere.
Ein Ansatz, der einfacher in Jenkins zu integrieren ist, ist von Vorteil.
Danke im Voraus!
Antworten:
Nachdem ich eine Weile mit fast jedem Asset-Pipeline-Tool im Java-Toolkit gearbeitet habe, bin ich zu einigen Schlussfolgerungen gekommen:
Java-basiertes Tooling
Es gibt eine Handvoll Tools, aber die beliebtesten sind JAWR und Wro4J. Das größte Problem bei beiden ist, dass sie hauptsächlich auf Rhino basieren (WRO4J hat jetzt einige Node-Unterstützung) und Rhino im Vergleich zu Node-basierten Tools nur langsam ist. Sie müssen auch berücksichtigen, dass das JavaScript-Tool schnell ausgereift ist, sodass Sie nach Tools suchen sollten, die sich schnell bewegen lassen.
WRO4J - Die Unterstützung ist großartig, die Integration von Maven UND Eclipse ist großartig. Die Liste der Plugins ist umfangreich und das Framework ist flexibel genug, dass Sie mit etwas Ellbogenfett ein Plugin für alles schreiben können, was Sie brauchen. Wenn Sie sich auf eine Java-basierte Asset-Pipeline beschränken, ist dies mit Sicherheit der richtige Weg. Das Problem mit Wro4j ist, dass es im Vergleich zu knotenbasierten Tools langsam ist (selbst wenn es Knotenprozesse startet).
Um einige reale Zahlen zu kompilieren und zu verketten, die 25 Asset-Bundles mit WENIGER, CSS CoffeeScript und JavaScript enthalten, dauert die Verwendung von Rhino ca. 35 Sekunden und die Verwendung der Knotenunterstützung von Wro4j auf einem 2013 iMac mit 16 GB RAM ca. 15 Sekunden. Die Verwendung von Grunt + Node dauert auf meinem mickrigen MacBook Air ungefähr 2 Sekunden.
JAWR - Die Integrationen und die Funktionsliste sind ziemlich gut, aber die Dokumente sind nicht großartig und das Schreiben eigener Plugins kann etwas schwierig sein. Als ich diesen Beitrag ursprünglich schrieb, befand sich JAWR mitten in einer 4-jährigen Pause, befindet sich jedoch seit Januar 2014 wieder in der aktiven Entwicklung. Wenn Sie sich für die Untersuchung von Java Tools entscheiden, ist dies eine Untersuchung wert.
Knotenbasiertes Tooling (integriert in Ant / Maven Builds)
Grunzen - Es ist einfach, hat ein fantastisches Plugin-Ökosystem und die Community ist riesig. Wenn Sie etwas tun müssen, können Sie darauf wetten, dass es ein Plugin dafür gibt - möglicherweise sogar eines, das von den Machern von grunt geschrieben wurde. Die Hauptkritikpunkte von Grunt sind, dass es konfigurationsgesteuert ist, was eine sehr einfache Einrichtung ermöglicht, aber nicht der "Node Way" ist. Erwähnenswert ist auch, dass Grunt-Aufgaben nicht einfach zu komponieren sind, sodass Grunt für eine komplexe JavaScript-Build-Pipeline möglicherweise nicht ideal ist.
Gulp - Gulp ist die schnell wachsende Alternative zu Grunt. Es ist standardmäßig gleichzeitig und verwendet Streams, um temporäre Schreibvorgänge in das Dateisystem zu vermeiden, die Ihren Build erheblich beschleunigen können. Gulp ist sehr idiomatisch und konzentriert sich auf Code> Konfiguration. Dies gibt Ihnen zwar viel Leistung, ist jedoch nicht ideal für Teams, die keine Kernkompetenz in JavaScript haben.
Das einzige mögliche Problem für JavaScript-basierte Tools besteht darin, dass Sie Node , npm und grunt-cli / gulp auf jedem Computer haben müssen, der die Kompilierung durchführen muss. Wenn Sie keinen Zugriff auf Ihre CI-Maschinen haben oder keine auf Artefakten basierenden Bereitstellungen verwenden, kann dies ein schwerer Verkauf sein.
Die Integration in Ihr Maven-Projekt ist ziemlich einfach und Sie haben einige Optionen. Sie können das Maven Ant-Run-Plugin verwenden , eine Ant Exec-Task ausführen und von Maven aus aufrufen oder am besten einfach die Maven Exec-Task verwenden .
Unten finden Sie den Code, um dies mithilfe des exec-Plugins in den Maven-Lebenszyklus zu integrieren, wenn dies für jemanden hilfreich ist.
quelle
Maven
Builds, wenn dergrunt
Build fehlschlägt?Für alle, die noch nach weiteren Informationen zu diesem Thema suchen, hat einer der Schöpfer von Yeoman einen guten Artikel (der einige Monate nach der ursprünglichen Beantwortung dieser Frage geschrieben wurde), der die ursprüngliche Antwort um etwas mehr Details erweitert:
quelle
Dann gibt es noch das Frontend-Maven-Plugin: https://stackoverflow.com/a/19600777/320399 Es lädt Node und NPM für Sie herunter (lokal für Ihr Projekt), lädt Grunt über diesen NPM herunter (wird von diesem Node ausgeführt) und dann führt Grunt aus (über diesen Knoten). Es ist ein Selbst-Bootstrapping, und Sie müssen Node nicht auf dem Computer installiert haben, um das Projekt zu erstellen. Nur ein Befehl; mvn installieren.
quelle
Vielleicht möchten Sie http://jhipster.github.io/ auschecken : Es ist ein Yeoman-Generator, der eine Anwendung generiert, bei der Maven, Grunt und Bower zusammenarbeiten.
Es ist ein bisschen wie Ihre dritte Option, aber alles ist für Sie konfiguriert, was nicht so einfach ist. Außerdem werden die grundlegenden AngularJS- und Java-REST-Services für Sie generiert.
quelle
Nach ein paar Stunden, die ich mit diesem Problem verbracht habe, kann ich Folgendes sagen:
Maven und Grunzen spielen nicht gut, aber es kann erzwungen werden.
Hier ist eine Plugin-Beschreibung zum Ausführen von Grunt über Maven Build
ich hoffe das hilft :)
quelle