Javascript web app and Java server, build all in Maven or use Grunt for web app?
Tworzymy aplikację internetową z AngularJS i podoba nam się pomysł użycia Bowera do zarządzania zależnościami i Grunt do budowania, uruchamiania testów itp. (Yeoman )
Serwer jest wykonywany w Javie przy użyciu Mavena, więc oczywiście chcielibyśmy z prostym mvn install
zbudować wszystko (aplikacja webowa + Serwer)
Więc jakie podejście przyjąłeś i dlaczego?
1) traktuj je jako dwa różne zastosowania, którymi w rzeczywistości są. Więc korzystanie z różnych metod/narzędzi budowlanych jest akceptowalne.
2) zapomnij o Grunt Bowerze, użyj wtyczek Mavena do budowania, uruchamiania testów, zarządzania zależnościami dla aplikacji internetowej. Jeśli tak, to które?
3) Użyj Maven exec plugin do wywołania Grunt zbudować front-end webapp. Widzę to bardziej jako hack niż rozwiązanie.
4) Inne.Podejście łatwiejsze do integracji z Jenkinsem jest plusem.
Z góry dzięki!5 answers
Po pracy z każdym narzędziem Asset pipeline w zestawie narzędzi Java doszedłem do kilku wniosków:
Narzędzia Oparte Na Javie
Istnieje kilka narzędzi, ale najbardziej popularne są JAWR i Wro4J. największym problemem z obu z nich jest to, że są one głównie Rhino oparte (WRO4J ma teraz pewne wsparcie dla węzłów) i Rhino jest pies powolny w porównaniu do narzędzi opartych na węzłach. Musisz również wziąć pod uwagę, że narzędzia JavaScript szybko dojrzewają, więc powinien szukać narzędzi, które mogą poruszać się szybko.
WRO4J - Support is great, Maven and Eclipse integration are great lista wtyczek jest obszerna, a framework jest na tyle elastyczny, że z jakimś elbow grease możesz napisać wtyczkę do czego potrzebujesz. Jeśli ograniczasz się do potoku zasobów opartego na Javie, jest to na pewno droga do zrobienia. Problem z Wro4j polega na tym, że jest powolny (nawet gdy uruchamia procesy węzłowe ) w stosunku do narzędzi opartych na węzłach.
Aby dać pewne liczby świata rzeczywistego kompilowanie i łączenie pakietów zasobów 25 zawierających mniej, CSS CoffeeScript i JavaScript zajmuje około ~35s przy użyciu Rhino i ~15s przy użyciu obsługi węzłów Wro4j na iMac 2013 z 16G pamięci RAM. Używanie Grunt+Node zajmuje około 2s na moim słabym MacBooku Air.JAWR - integracje i lista funkcji są całkiem dobre, ale docs nie są świetne i pisanie własnych wtyczek może być trochę trudne. Kiedy pisałem ten post JAWR był w środku 4 letniej przerwy, ale teraz jest z powrotem w aktywnym rozwoju od stycznia 2014. Jeśli zdecydujesz się zbadać narzędzia Java, warto to zbadać.
Grunt - to proste, ma fantastyczny ekosystem wtyczek i społeczność jest ogromna. Jeśli jest coś, co musisz zrobić, możesz założyć się, że jest do tego wtyczka - prawdopodobnie nawet napisana przez twórców grunt. Główną krytyką Grunt jest to, że jest napędzany konfiguracją, co sprawia, że konfiguracja jest bardzo łatwa, ale nie jest " drogą węzła."Warto również wspomnieć, że zadania Grunt nie są łatwe do komponowania, więc dla złożonego JavaScript build pipeline Grunt może nie być idealny.
Gulp - Gulp jest szybko rosnącą alternatywą dla Grunt. Domyślnie współbieżny i używa strumieni, aby uniknąć tymczasowego zapisu do systemu plików, co może znacznie przyspieszyć kompilację. Łyk jest bardzo idiomatic i kładzie nacisk na kod > konfiguracja i chociaż daje to dużo mocy, nie jest idealny dla zespołów, które nie mają podstawowej kompetencji w JavaScript.
Jedynym potencjalnym zawieszeniem narzędzi opartych na JavaScript jest to, że będziesz musiał mieć węzeł, npm i grunt-CLI/gulp na dowolnym komputerze, który musi wykonać kompilację. Jeśli nie masz dostępu do swoich maszyn CI lub nie korzystasz z wdrożeń opartych na artefaktach, może to być ciężka sprawa.
Integracja tego z projektem Maven jest dość łatwa i masz sporo opcji. Możesz użyć wtyczki Maven ant-run , możesz uruchomić Ant Exec task i wywołać je z Mavena lub najlepiej po prostu użyć Maven Exec task.
Poniżej znajduje się kod, aby zintegrować to do cyklu życia Maven za pomocą wtyczki exec, jeśli jest to pomocne dla kogokolwiek.
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 17:10:49
Dla wszystkich, którzy wciąż szukają więcej informacji na ten temat, jeden z twórców Yeoman ma dobry artykuł (napisany kilka miesięcy po tym, jak pierwotnie zadano to pytanie), który rozszerza oryginalną odpowiedź o nieco więcej szczegółów:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-23 18:11:08
Jest jeszcze frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 Pobiera węzeł i NPM dla Ciebie (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 samo-bootstrapping i nie potrzebujesz węzła zainstalowanego na komputerze, aby zbudować projekt. Tylko jedno polecenie; mvn install.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:24:24
You might want to checkout http://jhipster.github.io / : jest to Generator Yeoman, który generuje aplikację, która Maven, Grunt i Bower współpracują ze sobą.
To trochę jak trzecia opcja, ale wszystko jest skonfigurowane dla ciebie, co nie jest takie proste. Generuje również podstawowe usługi AngularJS i Java REST dla Ciebie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 15:43:34
Po kilku godzinach spędzonych nad tym problemem, mogę powiedzieć tak:
Maven i grunt nie grają dobrze, ale można to wymusić..
Oto Opis wtyczki do uruchamiania Grunt przez Maven build
Mam nadzieję, że to pomoże:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 07:17:12