Веб-додаток Javascript та сервер Java, будуйте все в Maven або використовуйте Grunt для веб-додатків?


97

Ми робимо веб-додаток з AngularJS і нам подобається ідея використання Bower для управління залежностями та Grunt для побудови, запуску тестів тощо ( Yeoman )

Сервер виконується з Java за допомогою Maven, тому, звичайно, ми хотіли б, щоб з допомогою простого mvn installпобудувати все (веб-додаток + сервер)

То який підхід ви взяли і чому?

1) Ставтесь до них як до двох різних застосувань, якими вони насправді є. Тому використання різних методів / інструментів побудови є прийнятним.

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

3) Використовуйте плагін Maven exec, щоб зателефонувати Grunt, щоб створити перехідний веб-сайт. Я бачу це більше як хак, ніж рішення.

4) Інше.

Підхід, який легше інтегрувати з Дженкінсом, є плюсом.

Спасибі заздалегідь!


2
Через 3 роки інтеграція інструментів, очевидно, покращилася. Здається, цей плагін Maven охоплює більшість речей: github.com/eirslett/frontend-maven-plugin
earcam

Відповіді:


73

Після деякої роботи з кожним інструментом конвеєра активів у наборі інструментів Java я прийшов до кількох висновків:

Інструментарій на основі Java

Існує кілька інструментів, але найпопулярнішими є JAWR та Wro4J. Найбільшою проблемою для обох цих є те, що вони здебільшого базуються на носорогах (WRO4J зараз має підтримку у вузлах), а Rhino - повільний у порівнянні з інструментами на основі вузла. Ви також повинні врахувати, що інструмент JavaScript швидко дозріває, тому вам слід шукати інструменти, які можуть швидко рухатися.

  • WRO4J - Підтримка чудова, інтеграція Maven AND Eclipse - це великий список плагінів, обширний, а рамки досить гнучкі, що за допомогою змащення ліктя ви можете написати плагін для будь-якого необхідного. Якщо ви обмежені конвеєром активів на основі Java, це, безсумнівно, шлях. Проблема з Wro4j полягає в тому, що він повільний (навіть коли він запускає Node процеси) щодо інструментів на основі вузла.
    Щоб дати декілька реальних цифр, що складають та об'єднують 25 пакетів активів, що містять менше, CSS CoffeeScript та JavaScript, займає близько 35 секунд при використанні Rhino та ~ 15 секунд, використовуючи підтримку Node Wro4j на iMac 2013 з 16G оперативної пам’яті. Використання Grunt + Node займає близько 2 с на моєму мізерному MacBook Air.

  • JAWR - Інтеграція та перелік функцій досить непогані, але документи не чудові, і написання власних плагінів може бути трохи складним. Коли я спочатку писав цю посаду, JAWR опинився в середині 4-річного перерви, але зараз він перебуває в активному розвитку, починаючи з січня 2014 року. Якщо ви вирішите дослідити Java Tools, це варто вивчити.

Інструментарій на основі вузлів (інтегрований зі збірками Ant / Maven)

  • Grunt - Це просто, має фантастичну екосистему плагінів, а спільнота є масовою. Якщо є щось, що вам потрібно зробити, ви можете зробити ставку, що для нього є плагін - можливо навіть один, написаний творцями грунту. Основні зауваження Грунта полягають у тому, що це керування конфігурацією, що робить процес дуже простою, але це не "Шлях до вузла". Варто також зазначити, що завдання Grunt не легко поєднуються, тому для складного конвеєра JavaScript JavaScript Grunt може бути не ідеальним.

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

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

Інтегрувати це у свій проект Maven досить просто, і у вас є досить багато варіантів. Ви можете використовувати плагін Maven ant-run , ви можете запустити mt 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>

1
Дякую за детальну відповідь. Думаю, я піду для параметра "Інструменти на основі вузла". Нове для Грунта Мені подобається те, що я бачив до цього часу, і було б чудово, якщо я можу мати найкраще з двох світів. Я не знав про існування WRO4J та JAWR. Знову дякую.
недійсна

wro4j інтегрує процесор less4j, який на базі Java реалізує less.js, продуктивність якого порівнянна з нативним node.js.
Alex Alelelean

1
Причина, чому wro4j не так швидко з node.js, здебільшого полягає в тому, що для кожного виконання операцій потрібні операції з виводу диска. Це можна покращити, лише якщо процеси, засновані на node.js (такі як lessc), дозволять компілювати ресурси в пам'яті.
Олексій Облєан

12
Чи підтримує цей процес збій у Mavenзборі, якщо gruntзбірка не працює?
Снексе

6
Будь-яке завдання виконання, яке не повертається належним чином, повинно зірвати збірку. stackoverflow.com/questions/3480162/…
Baer

24

Для тих, хто все ще шукає додаткову інформацію на цю тему, один із творців Yeoman має гарну статтю (написану через кілька місяців після того, як це питання було спочатку задано), яка розкриває оригінальну відповідь дещо детальніше:


Подвійна подяка! Я вважав, що ця публікація є надзвичайно корисною, і це було більше того, що я шукав,
Райан Дж. МакДонаф

13

Тоді також є плагін frontend-maven: https://stackoverflow.com/a/19600777/320399 Він завантажує для вас Node та NPM (локально для вашого проекту), завантажує Grunt через цей NPM (керує цим вузлом), а потім запускає Grunt (через цей Вузол). Це самозавантаження, і вам не потрібен Вузол, встановлений на машині для створення проекту. Всього одна команда; mvn встановити.


13

Ви можете перевірити http://jhipster.github.io/ : це генератор Yeoman, який генерує додаток, в якому Maven, Grunt і Bower працюють разом.

Це трохи схоже на ваш третій варіант, але все налаштовано для вас, що не так просто. Він також генерує для вас основні послуги AngularJS та Java REST.


1
Занадто пізно, щоб мій проект почав із щойно створеного додатку. Але це чудово і дуже корисно, я позичу деякі рішення із створеної програми та використання у своєму проекті. Дякую!
Matsemann

2
Насправді, вам просто потрібно включити плагін yeoman-maven, і це дозволяє вам розміщувати всі матеріали конфігурації JavaScript (bower, npm, grunt) як братів і сестер у pom.xml (саме там, де ці файли повинні належати IMO), і після mvn встановити він буде створювати все, включаючи ваш webapp під src / main / webapp. Мені потрібно менше ніж півгодини, щоб перенести існуючий проект до цієї структури. Звичайно, ви повинні подивитися прикладний додаток за адресою github.com/jhipster/jhipster-sample-app
raven_arkadon

4

через кілька годин, витрачених на цю проблему, я можу сказати це:

maven and grunt не грають добре, але це можна примусити ..

Ось опис плагіна для запуску Grunt через Maven build

Я сподіваюся, що це допомагає :)


дякую за відповідь, це допомагає так, але я спробую відповідно до @Baer відповіді.
недійсна

9
згаданий
гіст
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.