«1. Обзор
Spring Roo — это инструмент для быстрой разработки приложений (RAD), целью которого является предоставление быстрых и мгновенных результатов, ориентированных на веб-приложения Spring и новые технологии Spring. Это позволяет нам генерировать шаблонный код и структуру проекта для приложений Spring с помощью простых в использовании команд.
Roo можно использовать как отдельное приложение, работающее из командной строки операционной системы. Нет необходимости использовать Eclipse, Spring Tool Suite (STS) или любую другую IDE; на самом деле, мы можем использовать любой текстовый редактор для написания кода!
Однако для простоты мы будем использовать STS IDE с расширением Roo.
2. Установка Spring Roo
2.1. Требования
Чтобы следовать этому руководству, необходимо установить следующие компоненты:
2.2. Установка
После загрузки и установки Java JDK и STS нам нужно разархивировать Spring Roo и добавить его в системный путь.
Создадим переменную окружения ROO_HOME и добавим в путь %ROO_HOME%\\bin.
Чтобы убедиться, что Roo установлен правильно, мы можем открыть командную строку и выполнить следующие команды:
mkdir baeldung
cd baeldung
roo quit
Через несколько секунд мы увидим:
_
___ _ __ _ __(_)_ __ __ _ _ __ ___ ___
/ __| '_ \| '__| | '_ \ / _` | | '__/ _ \ / _ \
\__ \ |_) | | | | | | | (_| | | | | (_) | (_) |
|___/ .__/|_| |_|_| |_|\__, | |_| \___/ \___/
|_| |___/ 2.0.0.RC1
Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.
Roo установлен и работает. . Обратите внимание, что версия Spring Roo может различаться, а шаги и инструкции могут зависеть от фактической используемой версии.
Важно: Spring Roo 2.0 не имеет обратной совместимости с 1.x.
2.3. Добавление и настройка расширения STS
По умолчанию STS поддерживает разработку приложений Spring и включает готовые к использованию расширения. Однако расширение Spring Roo не включено. Поэтому нам нужно будет добавить его вручную.
В STS давайте перейдем к установке нового программного обеспечения и импортируем закладки на доступные сайты программного обеспечения. В настоящее время закладки находятся в папке %ROO_HOME%\\conf. После того, как мы импортировали закладки, мы можем найти просто roo и установить последнюю версию Spring IDE Roo Support. В конце нас попросят перезапустить STS.
Для получения подробных и актуальных шагов мы всегда можем обратиться к документации Spring Roo Getting Started.
После того, как мы установили поддержку Roo в STS, нам нужно настроить расширение. Это так же просто, как указать Roo Support в папку %ROO_HOME%. Опять же, Spring Roo Getting Started дает подробные шаги, как это сделать.
Теперь мы можем снова зайти в меню приложения «Window» и выбрать Show View \u003e Roo Shell.
3. Первый проект
3.1. Настройка проекта в STS
В STS давайте откроем окно Roo Shell и щелкнем значок «Создать новый проект Roo». Откроется окно New Roo Project.
Мы назовем проект roo и будем использовать com.baeldung в качестве имени пакета верхнего уровня. Мы можем оставить все остальные значения по умолчанию и перейти к созданию нового проекта с помощью Roo.
В STS это запустит для нас следующую команду:
project setup --topLevelPackage com.baeldung --projectName "roo" --java 8 --packaging JAR
Как уже упоминалось, нам не нужна IDE, и мы могли бы сами запустить эту команду из Roo Shell! Для простоты мы используем встроенные функции STS.
Если мы получаем следующую ошибку:
Could not calculate build plan: Plugin org.codehaus.mojo:aspectj-maven-plugin:1.8
or one of its dependencies could not be resolved:
Failed to read artifact descriptor for org.codehaus.mojo:aspectj-maven-plugin:jar:1.8
самый простой способ исправить это — вручную отредактировать файл pom.xml и обновить aspectj.plugin.version с 1.8 до 1.9:
<aspectj.plugin.version>1.9</aspectj.plugin.version>
На этом этапе, в проекте не должно быть ошибок, и для нас будет несколько автоматически сгенерированных файлов.
3.2. Roo Shell
Теперь пришло время познакомиться с Roo Shell. Фактически, основной пользовательский интерфейс Spring Roo — это командная строка!
Итак, вернемся к окну Roo Shell. Давайте запустим в нем первую команду, набрав «h» и нажав CTRL+ПРОБЕЛ:
roo> h
help hint
Roo автоматически предложит и заполнит команды для нас. Мы можем ввести «привет», нажать CTRL+ПРОБЕЛ, и Ру автоматически предложит подсказку.
Еще одна замечательная особенность Roo Shell — контекстная осведомленность. Например, вывод команды подсказки будет меняться в зависимости от предыдущего ввода.
Давайте теперь выполним команду подсказки и посмотрим, что произойдет:
roo> hint
Roo requires the installation of a persistence configuration.
Type 'jpa setup' and then hit CTRL+SPACE. We suggest you type 'H'
then CTRL+SPACE to complete "HIBERNATE".
After the --provider, press CTRL+SPACE for database choices.
For testing purposes, type (or CTRL+SPACE) HYPERSONIC_IN_MEMORY.
If you press CTRL+SPACE again, you'll see there are no more options.
As such, you're ready to press ENTER to execute the command.
Once JPA is installed, type 'hint' and ENTER for the next suggestion.
Она дает нам следующие шаги, которые нам нужно выполнить. Теперь добавим базу данных:
roo> jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
Created SRC_MAIN_RESOURCES\application.properties
Updated SRC_MAIN_RESOURCES\application.properties
Updated SRC_MAIN_RESOURCES\application-dev.properties
Updated ROOT\pom.xml [added dependencies org.springframework.boot:spring-boot-starter-data-jpa:, org.springframework.boot:spring-boot-starter-jdbc:, org.hsqldb:hsqldb:; added property 'springlets.version' = '1.2.0.RC1'; added dependencies io.springlets:springlets-data-jpa:${springlets.version}, io.springlets:springlets-data-jpa:${springlets.version}; added dependencies io.springlets:springlets-data-commons:${springlets.version}, io.springlets:springlets-data-commons:${springlets.version}]
«
«На этом этапе нам нужно будет выполнить некоторые команды. Между каждым из них мы всегда можем запустить команду подсказки, чтобы увидеть, что предлагает Ру. Это очень полезная функция.
roo>
entity jpa --class ~.domain.Book
field string --fieldName title --notNull
field string --fieldName author --notNull
field string --fieldName isbn --notNull
repository jpa --entity ~.domain.Book
service --all
web mvc setup
web mvc view setup --type THYMELEAF
web mvc controller --entity ~.domain.Book --responseType THYMELEAF
Давайте сначала запустим команды, а потом пройдемся по ним:
Теперь мы готовы запустить наше приложение. Однако давайте вернемся к командам, чтобы посмотреть, что мы сделали.
Сначала мы создали новый постоянный объект JPA в папке src/main/java. Затем мы создали три поля String в классе Book, дали им имя и установили ненулевое значение.
После этого мы сгенерировали репозиторий Spring Data для указанной сущности и создали новый сервисный интерфейс.
В итоге мы включили конфигурацию Spring MVC, установили Thymeleaf и создали новый контроллер, который управляет нашей сущностью. Поскольку мы передали Thymeleaf в качестве типа ответа, сгенерированные методы и представления будут отражать это.
3.3. Запуск приложения
Давайте обновим проект, щелкните правой кнопкой мыши проект roo и выберите «Запуск от имени» \u003e «Приложение Spring Boot».
После запуска приложения мы можем открыть веб-браузер и перейти по адресу http://localhost:8080. Рядом со значком Roo мы увидим меню «Книга» и под ним две опции: «Создать книгу» и «Список книг». Мы можем использовать это, чтобы добавить книгу в наше приложение и просмотреть список добавленных книг.
3.4. Другие функции
Когда мы откроем файл класса Book.java, мы заметим, что класс снабжен аннотациями @Roo. Они были добавлены Roo Shell и используются для управления и настройки содержимого файлов межтиповой декларации (ITD) AspectJ. Мы можем просмотреть файлы в проводнике пакетов в STS, сняв флажок «Скрыть сгенерированные ITD Spring Roo» в меню «Просмотр», или мы можем открыть файлы непосредственно из файловой системы.
Аннотации Roo имеют политику хранения SOURCE. Это означает, что аннотации не будут присутствовать в байт-коде скомпилированного класса, и не будет никакой зависимости от Roo в развернутых приложениях.
Еще одна явно отсутствующая часть класса Book.java — геттеры и сеттеры. Как уже упоминалось, они хранятся в отдельных файлах AspectJ ITD. Roo будет активно поддерживать этот шаблонный код для нас. Таким образом, изменения в полях любого класса будут автоматически отражаться в ITD AspectJ, поскольку Roo «отслеживает» все изменения — либо через Roo Shell, либо непосредственно разработчиком в IDE.
Roo также позаботится о повторяющемся коде, таком как методы toString() или equals().
Кроме того, фреймворк можно легко удалить из проекта, избегая привязки к поставщику, путем удаления аннотаций и вставки AspectJ ITD в стандартный код Java.
4. Заключение
В этом быстром примере нам удалось установить и настроить Spring Roo в STS и создать небольшой проект.
Мы использовали Roo Shell, чтобы настроить его, и нам не нужно было писать ни одной строки реального Java-кода! И мы смогли получить работающий прототип приложения за несколько минут, а Roo позаботился обо всем шаблонном коде для нас.
Как всегда, код, использованный в ходе обсуждения, можно найти на GitHub.