Java, gulp и структура папки maven
У меня есть веб-проект Java, который использует стандартный каталог Maven: файлы java попадают в java
(на самом деле: /src/main/java
), ресурсы в resources
, веб-контент в webapp
.
Затем мы хотели улучшить наш веб-слой, добавив bower, sass, gulp и т.д. Наша сборка gulp компилирует scss, сводит к минимуму javascripts, оптимизирует изображения и т.д., все, что вы ожидаете. Но это ввело 1) другой инструмент сборки, gulp и 2) сгенерированные файлы gulp.
Вопрос в том, как организовать такой проект? Один из способов:
(A) gulp встроен в папку webapp
В этом решении все файлы javascript, images, scss хранятся в /src/main/assets
и встраиваются в /src/main/webapp
. Оба источника и gulp -генерированные файлы привязаны к git. Конструкция gradle не зависит от gulp, и это нормально для пользователей, у которых не установлено gulp - как те, кому нужно работать только на бэкэнд. Кроме того, серверы CI не зависят от материала gulp.
(B) используйте gulp из gradle во время сборки
В этом решении gulp вызывается из gradle. gradle поэтому строит все. И вы должны использовать gradle каждый раз, когда хотите что-то попробовать. Кроме того, у каждого разработчика должен быть установлен gulp, что может быть проблемой для разработчиков, использующих окна (как мне сказали). Также сервер CI должен знать, как запустить gulp.
Моя команда разрывается между этими двумя вариантами. У кого-нибудь есть опыт работы с любым из этих решений?
Ответы
Ответ 1
Нынешняя лучшая практика заключается в том, чтобы обработать вашу внешнюю сборку как отдельный проект и поместить ее в свой собственный модуль Maven или Gradle. Попросите вашу систему Java-сборки вызвать инструмент JavaScript (например, с помощью maven-exec-plugin
) и сохранить вывод в соответствующем каталоге в target
или build
. Объедините результаты в банку и откройте путь к классам.
Если вы используете Bower, вам нужна только базовая Node установка на ваш CI-сервер, и ваша сборка Java может вызывать необходимый процесс сборки, извлекать пакеты JS по мере необходимости. Не забудьте (1) использовать --save
и (2) исключить каталог модулей JS из исходного элемента управления.
Кроме того, я предлагаю посмотреть RaveJS, который управляет вашей сборкой JavaScript и не позволяет вам настраивать наблюдателей и т.д. во время разработки.
Ответ 2
В настоящее время я использую Java + Grunt + Maven. Я обнаружил, что есть два способа упаковки вашего интерфейса с вашим бэкэнд, и то же самое относится к Gulp.
В конце концов, это лучше всего для вашего проекта/команды. По моему опыту, я обычно использую вариант B при работе с другими, так как развязка легко стоит других проблем. Когда я делаю свои собственные проекты, я всегда выбираю вариант A, потому что просто запустить один веб-сервер и запустить локальную среду ближе к тому, что DEV/PROD.
A) Поместите свой интерфейс в папку webapp (например https://github.com/kdubb1337/maven-grunt-webapp)
Преимущества. Вы можете запускать свой сервер и делать все в одном месте, а работа с Spring безопасна, даже без OAUTH. Меньше проблем, работающих с двумя веб-серверами в вашей локальной среде, когда они обычно будут связаны в один порт в других средах.
B) Держите свой интерфейс в другой папке или даже в другом репо, которое вы клонируете в корневую папку вашего backend-репо. (например, https://github.com/kdubb1337/maven-grunt) см. папку "yo"
Преимущества - Фантастическая развязка, поэтому разработчики интерфейсов могут жить в радости, даже не устанавливая java локально или не беспокоясь о перекомпиляции вашего бэкэнда. Отлично работает, если вы хотите, чтобы Travis (или ваше любимое приложение CI) выполнял модульные тесты на бэкэнд и интерфейсе.
EDIT Я нашел этот замечательный плагин, который вы можете использовать с maven/ gradle для создания интерфейса https://github.com/eirslett/frontend-maven-plugin. Похоже, что это путь, будет рефакторинг моих стартовых проектов с этим парнем за ворчание и gulp
Ответ 3
Рекомендуемая мной рекомендация - использовать com.github.eirslett.frontend-maven-plugin (или плагин maven grunt) для вызова сборки grunt/ gulp из mvn (в цели ресурсов процесса). Когда CI строит, он интегрируется, даже npm и т.д. Может быть установлен в mvn-target, поэтому вам не нужно настраивать свой CI-сервер для npm.
Когда разработчики строят, то в основном все еще просто используют одну команду maven. Для разработчиков JS/CSS/HTML, после установки mvn clean, они могут запускать grunt/ gulp "смотреть" в фоновом режиме, чтобы немедленно изменить их JS-изменения в браузере без каких-либо накладных расходов maven (просто злой быстрый gulp/grunt).
Ответ 4
- Разверните компоненты пользовательского интерфейса в директории webapp по умолчанию Tomcat.
- Разверните файлы классов в каталоге "wtpwebapps" (каталог по умолчанию для загрузки войны через eclipse).
Настройка Eclipse
- Перейдите на вкладку сервера, откройте свойства для tomcat
![]()
- Убедитесь, что местоположение должно быть [метаданные рабочей области]
- Затем дважды щелкните на tomcat, чтобы открыть обзор Tomcat.
![]()
- Задайте расположение сервера для "Использовать расположение tomcat".
Grunt/ Gulp Настройка
- Используйте задачу копирования, чтобы скопировать файл UI сборки в
<tomcat installation directory>/webapps/<contextRoot>/
https://pub.scotch.io/@ankur841/eclipse-tomcat-deployment-with-gruntgulp-build