build build - Javascript веб-приложение и Java-сервер, построить все в Maven или использовать Grunt для веб-приложения?





node js (5)


Тогда есть также frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 Он загружает Node и NPM для вас (локально для вашего проекта), загружает Grunt через этот NPM (выполняется этим узлом), а затем запускает Grunt (через этот узел). Это самонастраивается, и вам не нужен узел, установленный на машине для создания проекта. Только одна команда; mvn install.

Мы делаем веб-приложение с AngularJS, и нам нравится идея использования Bower for Dependency Management и Grunt для создания, запуска тестов и т. Д. ( Yeoman )

Сервер работает с Java, используя Maven, поэтому, конечно, нам бы хотелось с простой mvn install (веб-приложение + сервер)

Итак, какой подход вы взяли и почему?

1) Рассматривайте их как два разных приложения, которые на самом деле они есть. Таким образом, использование различных методов / инструментов здания приемлемо.

2) Забудьте о Grunt Bower, используйте плагины Maven для создания, запуска тестов, управления зависимостями для веб-приложения. Если это так, то какие?

3) Используйте плагин Maven exec, чтобы вызвать Grunt для создания front-end webapp. Я вижу это скорее как хак, чем решение.

4) Прочее.

Подход, который легче интегрировать с Дженкинсом, - плюс.

Заранее спасибо!







После некоторого времени работы с каждым инструментом конвейеров ресурсов в наборе инструментов Java я пришел к нескольким выводам:

Инструментарий на основе Java

Есть несколько инструментов, но самыми популярными являются JAWR и Wro4J. Самая большая проблема с обоими из них в том, что они в основном основаны на Rhino (у WRO4J теперь есть поддержка Node), а Rhino - собака медленная по сравнению с инструментами, основанными на узлах. Вы также должны учитывать, что инструмент JavaScript быстро созревает, поэтому вы должны искать инструменты, которые могут быстро перемещаться.

  • WRO4J - Поддержка отличная, интеграция Maven и Eclipse WRO4J список плагинов обширен, а структура достаточно гибкая, что с некоторой консистентной смазкой вы можете написать плагин для всех, что вам нужно. Если вы ограничены конвейером на основе Java, это, безусловно, путь. Проблема с Wro4j заключается в том, что она медленная (даже когда она запускает процессы узла) по сравнению с инструментами, основанными на узлах.
    Чтобы дать некоторые числа в реальном мире, компилируя и конкатенируя 25 пакетов активов, содержащих LESS, CSS CoffeeScript и JavaScript занимает около ~ 35 с при использовании Rhino и ~ 15 с использованием поддержки Node Wro4j на iMac 2013 года с 16 ГБ ОЗУ. Использование Grunt + Node занимает около 2 секунд на моем маленьком MacBook Air.

  • JAWR - Интеграция и список функций довольно хороши, но документы не велики, и писать свои собственные плагины можно немного сложнее. Когда я изначально написал этот пост, JAWR находился в середине 4-летнего перерыва, но сейчас находится в активном развитии с января 2014 года. Если вы решите исследовать Java Tools, это заслуживает внимания.

Инструмент, основанный на узлах (интегрированный с Ant / Maven Builds)

  • Grunt - Это легко, имеет фантастическую экосистему плагина, и сообщество массово. Если вам нужно что-то сделать, вы можете поспорить, что для него есть плагин - возможно, даже один, написанный создателями ворчания. Основная критика Grunt заключается в том, что он управляется конфигурацией, что упрощает настройку, но не является «узловым путем». Также стоит упомянуть, что задачи Grunt нелегко скомпонованы, поэтому для сложного проекта построения JavaScript Grunt может быть не идеальным.

  • Gulp - Gulp - это быстрорастущая альтернатива Grunt. Его одновременный по умолчанию и использует потоки, чтобы избежать временной записи в файловую систему, что может значительно ускорить вашу сборку. Gulp очень идиоматичен и имеет особый упор на настройке кода>, и, хотя это дает вам много энергии, он не идеален для команд, которые не имеют основной компетенции в JavaScript.

Единственный потенциал, зависящий от инструментов на основе JavaScript, - это то, что вам нужно будет иметь Node , npm и grunt-cli / gulp на любой машине, которая должна выполнить компиляцию. Если у вас нет доступа к вашим машинам CI или вы не используете развертывания на основе артефакта, это может быть трудно продать.

Интеграция этого в ваш проект Maven довольно проста, и у вас есть довольно много вариантов. Вы можете использовать Maven ant-run plugin , вы можете запустить задачу ant exec и вызвать ее из Maven или лучше всего вы можете просто использовать задачу maven exec .
Ниже приведен код для его интеграции в жизненный цикл Maven с использованием плагина exec, если это полезно для кого-либо.

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



Возможно, вы захотите проверить http://jhipster.github.io/ : это генератор Yeoman, который генерирует приложение, в котором все Maven, Grunt и Bower работают вместе.

Это немного похоже на ваш третий вариант, но все настроено для вас, что не так просто. Он также генерирует базовые услуги AngularJS и Java REST для вас.




я просто создаю суть здесь: https://gist.github.com/boly38/7316378

Это пример того, как регистрировать дату и время некоторых шагов жизненного цикла maven .

Конечно, вы можете адаптировать этот пример, чтобы установить собственный формат вывода (и отобразить его на графике ...).

Надеюсь это поможет

Извлечь:

        <profile>
            <id>stats</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>log_validate</id>
                                <phase>validate</phase>
                                <goals><goal>run</goal></goals>
                                <configuration>
                                    <tasks>
                                        <tstamp><format property="stepTstamp" pattern="dd-HH:mm:ss" locale="en,US" /></tstamp>
                                        <echo file="stats.log" append="true"
                                              message="${line.separator}${line.separator}${stepTstamp} validate${line.separator}"/>
                                    </tasks>
                                </configuration>
                            </execution>
    (...)
                            <execution>
                                <id>log_process_sources</id>
                                <phase>process-sources</phase>
                                <goals><goal>run</goal></goals>
                                <configuration>
                                    <tasks>
                                        <tstamp><format property="stepTstamp" pattern="dd-HH:mm:ss" locale="en,US" /></tstamp>
                                        <echo file="stats.log" append="true"
                                              message="${stepTstamp} process-sources${line.separator}"/>
                                    </tasks>
                                </configuration>
                            </execution>
(...)




maven build angularjs build-automation gruntjs