Tworzymy aplikację internetową z AngularJS i podoba nam się pomysł wykorzystania Bower for Dependency Management i Grunt do budowania, uruchamiania testów itp. ( Yeoman )
Serwer jest zrobiony z Javą przy użyciu Mavena, więc oczywiście chcielibyśmy, aby mvn install
wszystko było proste (aplikacja internetowa + serwer)
Jakie więc podejście obrałeś i dlaczego?
1) Potraktuj je jako dwie różne aplikacje, którymi w rzeczywistości są. Zatem używanie różnych metod / narzędzi budowlanych jest dopuszczalne.
2) Zapomnij o Grunt Bower, używaj wtyczek Maven do budowania, uruchamiania testów, zarządzania zależnościami dla aplikacji internetowej. Jeśli tak, to które?
3) Użyj wtyczki Maven exec, aby wywołać Grunta w celu zbudowania front-endowej aplikacji internetowej. Postrzegam to bardziej jako hack niż rozwiązanie.
4) Inne.
Podejście łatwiejsze do integracji z Jenkins jest plusem.
Z góry dziękuję!
Odpowiedzi:
Po dłuższej pracy z każdym narzędziem do zarządzania zasobami w zestawie narzędzi Java doszedłem do kilku wniosków:
Narzędzia oparte na języku Java
Istnieje kilka narzędzi, ale najpopularniejsze to JAWR i Wro4J. Największym problemem z obydwoma jest to, że są one głównie oparte na Rhino (WRO4J ma teraz wsparcie dla węzłów), a Rhino działa wolno w porównaniu do narzędzi opartych na węzłach. Musisz również wziąć pod uwagę, że narzędzia JavaScript szybko się rozwijają, dlatego powinieneś szukać narzędzi, które mogą się szybko poruszać.
WRO4J - Wsparcie jest świetne, integracja Maven I Eclipse jest świetna, lista wtyczek jest obszerna, a struktura jest na tyle elastyczna, że przy odrobinie smaru można napisać wtyczkę na wszystko, czego potrzebujesz. Jeśli jesteś ograniczony do potoku zasobów opartego na Javie, jest to z pewnością droga. Problem z Wro4j polega na tym, że jest powolny (nawet gdy uruchamia procesy Node) w porównaniu z narzędziami opartymi na Node.
Aby podać rzeczywiste liczby, kompilacja i konkatenacja 25 pakietów zasobów zawierających MNIEJ, CSS CoffeeScript i JavaScript zajmuje około 35 sekund przy używaniu Rhino i ~ 15 sekund przy użyciu obsługi Wro4j's Node na iMacu 2013 z 16 GB pamięci RAM. Używanie Grunt + Node na moim słabym MacBooku Air zajmuje około 2 s.
JAWR - Integracje i lista funkcji są całkiem dobre, ale dokumentacja nie jest świetna, a pisanie własnych wtyczek może być trochę trudne. Kiedy pierwotnie pisałem ten post, JAWR znajdował się w środku 4-letniej przerwy, ale teraz jest ponownie aktywnie rozwijany od stycznia 2014 r. Jeśli zdecydujesz się zbadać narzędzia Java, warto to zbadać.
Narzędzia oparte na węzłach (zintegrowane z kompilacjami Ant / Maven)
Grunt - to proste, ma fantastyczny ekosystem wtyczek, a społeczność jest ogromna. Jeśli jest coś, co musisz zrobić, możesz się założyć, że jest do tego wtyczka - być może nawet napisana przez twórców pomruka. Główną krytyką Grunta jest to, że jest on sterowany konfiguracją, co sprawia, że konfiguracja jest bardzo łatwa, ale nie jest „sposobem węzła”. Warto również wspomnieć, że zadania Grunt nie są łatwe do komponowania, więc w przypadku złożonego potoku kompilacji JavaScript Grunt może nie być idealny.
Gulp - Gulp to szybko rozwijająca się alternatywa dla Grunt. Domyślnie jest współbieżny i wykorzystuje strumienie, aby uniknąć tymczasowych zapisów w systemie plików, co może znacznie przyspieszyć twoją kompilację. Gulp jest bardzo idiomatyczny i kładzie nacisk na konfigurację kodu> i chociaż daje ci to dużo mocy, nie jest idealny dla zespołów, które nie mają podstawowych kompetencji w JavaScript.
Jedynym potencjalnym problemem dla narzędzi opartych na JavaScript jest to, że będziesz musiał mieć Node , npm i grunt-cli / gulp na każdej maszynie, która musi wykonać kompilację. Jeśli nie masz dostępu do swoich maszyn CI lub nie używasz wdrożeń opartych na artefaktach, może to być trudna sprzedaż.
Integracja tego z projektem Maven jest dość łatwa i masz sporo opcji. Możesz użyć wtyczki Maven ant-run , możesz uruchomić zadanie ant exec i wywołać je z Mavena lub, co najlepsze, po prostu użyć zadania maven exec .
Poniżej znajduje się kod do zintegrowania tego z cyklem życia Mavena za pomocą wtyczki exec, jeśli jest to pomocne dla kogoś.
źródło
Maven
kompilacji, jeśligrunt
kompilacja się nie powiedzie?Dla każdego, kto wciąż szuka więcej informacji na ten temat, jeden z twórców Yeoman ma dobry artykuł (napisany kilka miesięcy po pierwszym zadaniu tego pytania), który rozszerza oryginalną odpowiedź o nieco więcej szczegółów:
źródło
Jest też wtyczka frontend-maven: https://stackoverflow.com/a/19600777/320399 Pobiera dla ciebie Node i NPM (lokalnie do twojego projektu), pobiera Grunt przez ten NPM (uruchamiany przez ten węzeł), a następnie uruchamia Grunt (przez ten węzeł). Jest to samoczynne uruchamianie się i nie musisz instalować Node na komputerze, aby zbudować projekt. Tylko jedno polecenie; mvn install.
źródło
Możesz sprawdzić http://jhipster.github.io/ : jest to generator Yeoman, który generuje aplikację, w której Maven, Grunt i Bower pracują razem.
To trochę jak twoja trzecia opcja, ale wszystko jest skonfigurowane dla ciebie, co nie jest takie łatwe. Generuje również dla Ciebie podstawowe usługi AngularJS i Java REST.
źródło
po kilku godzinach spędzonych nad tym problemem mogę powiedzieć tak:
maven i chrząknięcie nie grają dobrze, ale można to wymusić.
Oto opis wtyczki do uruchamiania Grunt przez kompilację Maven
mam nadzieję, że to pomoże :)
źródło