Достаточно часто в моей практике используется связка Spring + Angular. Хочу поделится своим опытом по подготовке подобного проекта в среде разработки IntelliJ IDEA.
Создаем пустой Gradle проект
Для начала создадим пустой Gradle проект в IDEA, при этом снимите все галочки библиотек и фреймворков.
![](https://habrastorage.org/webt/vf/il/qq/vfilqq0gnm8nlarkbollb_chiec.png)
Пусть наш артефакт будет «demo», а группа «com.habr». После создания проекта будет автоматически сгенерировано файлы settings.gradle и build.gradle со следующим содержанием:
build.gradle
group 'com.habr'
version '1.0'
settings.gradle
rootProject.name = 'demo'
Создаем модуль для Spring
Далее добавим в наш проект модуль, в котором будет размещайся серверная часть нашего приложения, т.е. Spring.
![](https://habrastorage.org/webt/sd/du/j_/sdduj_t4z_db5wrotarr1rbj2ow.png)
При создании данного модуля будем использовать Spring Initializr.
![](https://habrastorage.org/webt/mn/zo/e1/mnzoe1x8bewpe30iytvvvy44hjc.png)
Назовем модуль «demo-server», укажем тип проекта Gradle, группу com.habr, а имя основного пакета org.habr.demo.
![](https://habrastorage.org/webt/oo/an/ow/ooanowgml7z6wisa0octjuvjtlu.png)
Далее необходимо выбрать все необходимые компоненты фреймворка Spring, в данном примере я выбрал только «web», но вы можете выбрать все, что вам необходимо.
![](https://habrastorage.org/webt/qp/nn/ib/qpnnib9dovly70udh8uphsj9dis.png)
После создания модуля demo-server, обратите внимание, в нем создалось 2 файла: build.gradle и settings.gradle. Из settings.gradle данного модуля необходимо перенести следующие строки в начало файла settings.gradle самого проекта, а settings.gradle модуля — удалить.
pluginManagement {
repositories {
gradlePluginPortal()
}
}
Кроме того в settings.gradle проекта необходимо добавить созданный модуль, в итоге получим:
settings.gradle
pluginManagement {
repositories {
gradlePluginPortal()
}
}
rootProject.name = 'demo'
include 'demo-server'
После этого из файла build.gradle модуля demo-server удаляем следующие строки:
group = 'com.habr'
version = '0.0.1'
На этом создание первого модуля можно считать завершенным, но мы еще вернемся к нему, что бы связать его со вторым.
Создаем модуль для Angular
Создаем модуль demo-ui, как java gradle проект.
![](https://habrastorage.org/webt/5v/tk/ft/5vtkftnan9pmh1lwmbyhyv7tpea.png)
Назовем создаваемый модуль «demo-ui».
![](https://habrastorage.org/webt/fx/qd/wb/fxqdwbg9dgfnj6_wggxamqdonlk.png)
В созданном проекте необходимо удалить папку src. После выполнения данной операции, откройте терминал в корневой папке данного модуля.
![](https://habrastorage.org/webt/5b/fr/0o/5bfr0o-ob2vluag_lqi6klljckm.png)
В открывшемся терминале выполните команду:
ng new demo-ui
Команда приведет к установке Angular, при этом внутри модуля demo-ui будет создана папка с одноименным названием.
![](https://habrastorage.org/webt/4q/es/fj/4qesfj4_yndgpnbejgo1chpbgrq.png)
Все содержимое созданной папки, кроме node-modules, необходимо переместить в корень модуля, а саму папку удалить.
![](https://habrastorage.org/webt/yk/vc/ww/ykvcwwdsqayyq9wd9vgadvybi2e.png)
Теперь настроем сборку, для этого приводим build.gradle модуля «demo-ui» к следующему виду:
plugins {
id 'java'
id "com.moowork.node" version "1.3.1"
}
node {
version = '10.14.1'
npmVersion = '6.4.1'
download = true
}
jar.dependsOn 'npm_run_build'
jar {
//здесь "demo-ui" - имя Angular приложения, указанное в команде ng new
from 'dist/demo-ui' into 'static'
}
Модуль готов.
Связываем модули
Осталось просто добавить зависимость в build.gradle модуля «demo-server».
implementation project(':demo-ui')
В итоге получим в модуле «demo-server» следующий build.gradle:
plugins {
id 'org.springframework.boot' version '2.1.5.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation project(':demo-ui')
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Запуск
Для запуска приложения достаточно запустить задачу Gradle.
![](https://habrastorage.org/webt/xz/np/8f/xznp8fajeab-6yats7ceb7fsnm4.png)
После чего приложение будет собрано и запущено, его можно открывать в браузере.
![](https://habrastorage.org/webt/qi/dn/du/qidndu0ytyk-fohggmwkod4w4vg.png)
Ну а если вы хотите получить jar-файл, то просто запустите задачу build.
![](https://habrastorage.org/webt/md/q7/9r/mdq79rfnqcpy-kdpj-spsptbqsg.png)
Собранный файл будет вас ждать в demo-server/build/libs.
![](https://habrastorage.org/webt/wy/lq/6q/wylq6qfgpuzusxjgsewhzy0wazw.png)
makdoc
Спасибо большое, как раз искал подобный туториал.