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!
Author: void, 2013-03-14

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

Oprzyrządowanie oparte na węzłach (zintegrowane z Ant/Maven Builds)
  • 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>
 73
Author: Baer,
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:

 24
Author: Jeff Smith,
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.

 13
Author: Eirik Sletteberg,
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.

 13
Author: Julien Dubois,
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:)

 4
Author: Nadav Leshem,
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