1. 概述

Spring Roo 是一个专注于 Spring Web 应用程序和新兴 Spring 技术的快速应用开发(RAD)工具,旨在提供即时高效的开发体验。它通过简单的命令就能生成 Spring 应用的样板代码和项目结构。

Roo 可以作为独立应用在操作系统命令行中运行,无需依赖 Eclipse、Spring Tool Suite(STS)或其他 IDE——任何文本编辑器都能用来编写代码!

不过为了简化演示,我们将使用 STS IDE 配合 Roo 扩展。

⚠️ 注意:Spring Roo 已停止维护,最后更新于 2017 年,其 代码仓库 于 2018 年归档。

2. 安装 Spring Roo

2.1. 环境要求

跟随本教程前,请确保已安装:

  1. Java JDK 8
  2. STS
  3. Spring Roo

2.2. 安装步骤

下载并安装 Java JDK 和 STS 后,解压 Spring Roo 并添加到系统路径:

  1. 创建环境变量 ROO_HOME(指向 Roo 解压目录)
  2. %ROO_HOME%\bin 添加到系统 PATH

验证安装是否成功,在命令行执行:

mkdir baeldung
cd baeldung
roo quit

几秒后应看到如下输出:

                _
 ___ _ __  _ __(_)_ __   __ _   _ __ ___   ___
/ __| '_ \| '__| | '_ \ / _` | | '__/ _ \ / _ \
\__ \ |_) | |  | | | | | (_| | | | | (_) | (_) |
|___/ .__/|_|  |_|_| |_|\__, | |_|  \___/ \___/
    |_|                 |___/          2.0.0.RC1

Welcome to Spring Roo. For assistance press TAB or type "hint" then hit ENTER.

✅ 安装成功!注意版本号可能不同,具体步骤需根据实际版本调整。

⚠️ 重要:Spring Roo 2.0 与 1.x 版本不兼容。

2.3. 配置 STS 扩展

STS 默认支持 Spring 应用开发,但需手动添加 Roo 扩展:

  1. 在 STS 中进入 Help > Install New Software
  2. 导入 %ROO_HOME%\conf 目录中的书签到 Available Software Sites
  3. 搜索 roo 并安装最新版 Spring IDE Roo Support
  4. 重启 STS

最新配置步骤可参考 Spring Roo 官方文档

安装后需配置扩展路径:将 Roo Support 指向 %ROO_HOME% 目录。最后通过 Window > Show View > Roo Shell 打开 Roo 命令窗口。

3. 创建第一个项目

3.1. 在 STS 中创建项目

打开 Roo Shell 窗口,点击 Create New Roo Project 图标,填写:

  • 项目名:roo
  • 顶级包名:com.baeldung
  • 其他选项保持默认

STS 会自动执行命令:

project setup --topLevelPackage com.baeldung --projectName "roo" --java 8 --packaging JAR

踩坑提示:若遇到以下错误:

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.version1.8 更新为 1.9

<aspectj.plugin.version>1.9</aspectj.plugin.version>

此时项目应无错误,并自动生成基础文件。

3.2. Roo Shell 命令实战

Roo 的核心是命令行交互。在 Roo Shell 中输入 h 后按 CTRL+SPACE

roo> h

help    hint

Roo 会自动补全命令。输入 hi 再按 CTRL+SPACE 会提示 hint 命令。

上下文感知是 Roo Shell 的关键特性:hint 命令的输出会根据历史操作动态变化。执行 hint

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

接下来执行核心命令(每步后可用 hint 查看下一步建议):

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

这些命令的作用:

  1. 创建 JPA 实体类 Book(位于 src/main/java
  2. 添加三个非空字符串字段:titleauthorisbn
  3. 生成 Spring Data JPA 仓库
  4. 创建服务接口
  5. 配置 Spring MVC
  6. 集成 Thymeleaf 模板引擎
  7. 生成管理 Book 实体的控制器(使用 Thymeleaf 视图)

3.3. 运行应用

刷新项目后右键点击 roo 项目,选择 Run As > Spring Boot App

启动成功后访问 http://localhost:8080,将看到:

  • Roo 图标旁的 Book 菜单
  • 两个子选项:Create Book(创建书籍)和 List Books(书籍列表)

可直接通过界面添加书籍并查看列表。

3.4. 核心特性解析

打开 Book.java 会发现类上带有 @Roo 注解。这些注解由 Roo 添加,用于控制 AspectJ ITD(Inter-Type Declaration) 文件的内容。在 STS 中取消 Hide generated Spring Roo ITDs 过滤器即可查看 ITD 文件。

关键特性:

  • 零运行时依赖@Roo 注解的保留策略为 SOURCE,编译后不会出现在字节码中
  • 自动维护样板代码:getter/setter、toString()equals() 等方法存储在独立 ITD 文件中,Roo 会自动同步字段变更
  • 无厂商锁定:可通过移除注解并将 ITD 代码推送到标准 Java 类来移除 Roo

4. 总结

本教程完成了 Spring Roo 的安装配置和项目创建。通过 Roo Shell 命令,我们零手写 Java 代码就生成了完整的应用原型,所有样板代码均由 Roo 自动维护。

虽然 Roo 已停止维护,但其设计理念(如命令驱动开发、ITD 代码生成)对理解现代脚手架工具仍有参考价值。

完整代码示例见 GitHub 仓库


原始标题:Spring Roo