Apache Grails 常用 CLI 命令与工具详解

详解 Apache Grails 6.x 的 grails CLI 命令与 Gradle 包装工具,覆盖工程创建、代码生成、运行调试、构建打包、测试、统计等常用子命令,并附真实回显与命令速查表,示例账号为 root。

Apache GrailsApache GrailsJavaApache运维2026/10/12

Apache Grails 常用 CLI 命令与工具详解

Apache Grails 通过 grails 命令提供统一的脚手架与构建入口,底层驱动 Gradle。本文系统整理 Grails 6.x 的常用命令、真实回显与 Gradle 包装命令。示例登录账号为 root / q1w2e3r4。

一、CLI 概览

1.1 命令语法

grails [environment]* [target] [arguments]*
  • environment:可选环境(dev / test / prod),缺省为 dev。
  • target:命令名,如 run-app、create-app。
  • arguments:命令参数。

示例:

grails dev run-app
grails create-app books

1.2 查看帮助

grails help                     # 列出全部命令
grails help run-app             # 查看某命令用法

grails help 实测输出节选:

| Available Commands (type grails help 'command-name' for more info):
| Command Name                          Command Description
----------------------------------------------------------------------------------------------------
assemble                                Creates a JAR or WAR archive for production deployment
clean                                   Cleans a Grails application's compiled sources
compile                                 Compiles a Grails application
console                                 Runs the Grails interactive console
create-app                              Creates an application
create-controller                       Creates a controller
create-domain-class                     Creates a Domain Class
generate-all                            Generates a controller that performs CRUD operations and the associated views
run-app                                 Runs a Grails application
stop-app                                Stops the running Grails application
test-app                                Runs the applications tests
stats                                   Prints statistics about the project
...

二、工程创建类命令

2.1 create-app

创建应用骨架:

grails create-app demoapp

实测回显:

| Application created at /root/grails-lab/demoapp

指定 profile 与包名:

grails create-app myservice --profile=rest-api --group=com.example

--profile 可用值包括 web(默认)、rest-api、plugin。

2.2 create-plugin

创建可复用插件工程:

grails create-plugin myplugin

2.3 create-command / create-script

grails create-command my-command     # 创建应用命令
grails create-script my-script       # 创建 Grails 脚本

三、代码生成类命令

3.1 create-controller

grails create-controller Hello

实测回显:

| Created grails-app/controllers/demoapp/HelloController.groovy
| Created src/test/groovy/demoapp/HelloControllerSpec.groovy

3.2 create-domain-class

grails create-domain-class demoapp.Book

实测回显:

| Created grails-app/domain/demoapp/Book.groovy
| Created src/test/groovy/demoapp/BookSpec.groovy

3.3 create-service / create-interceptor / create-taglib

grails create-service Book
grails create-interceptor Auth
grails create-taglib MyTagLib

3.4 generate-all / generate-controller / generate-views

为域类生成 CRUD 控制器与视图:

grails generate-all demoapp.Book

实测回显节选:

| Scaffolding completed for grails-app/domain/demoapp/Book.groovy
| Rendered template index.gsp to destination grails-app/views/book/index.gsp
| Rendered template create.gsp to destination grails-app/views/book/create.gsp
| Views generated for grails-app/domain/demoapp/Book.groovy

也可仅生成控制器或视图:

grails generate-controller Book
grails generate-views Book

3.5 测试脚手架

grails create-unit-test Book
grails create-integration-test Book
grails create-functional-test Book

四、运行与调试类命令

4.1 run-app

启动应用(内嵌 Tomcat):

export JAVA_OPTS="-Xmx512m"     # JVM 堆限制在 256–512MB 规范内
grails run-app

实测回显:

Grails application running at http://localhost:8080 in environment: development

指定环境与端口:

grails prod run-app
SERVER_PORT=9090 grails run-app

4.2 stop-app

grails stop-app

实测回显:

| Shutting down application...
| {"message":"Shutting down, bye..."}
| Application shutdown.

4.3 console / shell

进入交互式控制台,可执行 Grails 命令与 Groovy 脚本:

grails console
grails shell

4.4 run-script / run-command

grails run-script src/scripts/task.groovy
grails run-command create-domain-class demoapp.Author

五、构建与打包类命令

5.1 assemble(等价于打包 WAR/JAR)

grails assemble

产物位于 build/libs/ 下。Grails 6.x 不提供 war 命令,打包统一由 assemble 完成。

5.2 compile / clean

grails compile      # 编译应用
grails clean        # 清理编译产物

5.3 生产构建常用组合

grails clean && grails assemble

构建后的归档可直接用 java -jar 运行:

java -Xmx512m -jar build/libs/demoapp-0.1.jar

六、测试类命令

6.1 test-app

运行单元测试与集成测试:

grails test-app

限定测试类或类型:

grails test-app BookControllerSpec
grails test-app --unit
grails test-app --integration

6.2 dependency-report

打印依赖树,排查版本冲突:

grails dependency-report

七、信息与统计类命令

7.1 stats

grails stats

实测回显:

+----------------------+-------+-------+
| Name                 | Files |  LOC  |
+----------------------+-------+-------+
| Controllers          |     2 |    88 |
| URL Mappings         |     1 |    12 |
| Domain Classes       |     1 |     5 |
| Services             |     1 |    10 |
+----------------------+-------+-------+
| Totals               |     9 |   365 |
+----------------------+-------+-------+

7.2 url-mappings-report

查看应用 URL 路由:

grails url-mappings-report

7.3 其他诊断命令

grails plugin-info <plugin>     # 查看插件信息
grails list-plugins             # 列出仓库插件
grails bug-report               # 生成问题报告压缩包
grails schema-export            # 导出数据库 DDL

八、Gradle 包装命令(./gradlew)

grails 命令底层即 Gradle。工程自带 Gradle Wrapper,可直接使用 ./gradlew:

Grails 命令等价 Gradle 命令
grails run-app./gradlew bootRun
grails test-app./gradlew test
grails compile./gradlew classes
grails clean./gradlew clean
grails assemble./gradlew assemble 或 ./gradlew bootWar
grails console./gradlew console

示例:

./gradlew clean bootRun
./gradlew clean bootWar
./gradlew test --tests "demoapp.BookControllerSpec"

也可透传 Gradle 任务:

grails gradle tasks
grails gradle dependencies

九、常用命令速查表

命令用途典型用法
create-app创建应用grails create-app demoapp
create-controller创建控制器grails create-controller Hello
create-domain-class创建域类grails create-domain-class Book
create-service创建服务grails create-service Book
generate-all生成 CRUD 控制器与视图grails generate-all Book
run-app启动应用grails run-app
stop-app停止应用grails stop-app
test-app运行测试grails test-app
assemble打包 JAR/WARgrails assemble
clean清理产物grails clean
compile编译grails compile
console交互式控制台grails console
stats工程统计grails stats
help查看帮助grails help run-app

十、常见问题

Q1:grails 与 ./gradlew 有什么区别? grails 是封装后的高层入口,语义更贴近框架;./gradlew 直接驱动构建,适合 CI 与自定义任务。两者底层一致。

Q2:为什么执行 grails war 报未知命令? Grails 6.x 已移除 war 命令,使用 grails assemble 或 ./gradlew bootWar 打包。

Q3:首次执行命令很慢? 首次运行需下载 Gradle 发行包(约 100MB+)与依赖,属正常现象;后续使用本地缓存会显著加快。

Q4:如何在 CI 中非交互运行? 使用 ./gradlew --no-daemon 并配合 grails 的相应目标,避免守护进程与交互等待。