(快速参考)

2 入门指南

版本 6.2.0

2 入门指南

2.1 安装要求

在安装 Grails 之前,您需要安装 Java 开发工具包 (JDK),最低版本要求如下表所示。请下载适用于您操作系统的 JDK,运行安装程序,然后设置名为 JAVA_HOME 的环境变量,指向此安装的位置。

Grails 版本 JDK 版本(最低)

6

11

5

8

为了自动化 Grails 的安装,我们推荐使用 SDKMAN,它可以极大地简化多个 Grails 版本的安装和管理。

在某些平台上(例如 macOS),Java 安装会自动检测到。但是,在许多情况下,您需要手动配置 Java 的位置。例如,如果您使用的是 bash 或其他 Bourne Shell 变体

export JAVA_HOME=/Library/Java/Home
export PATH="$PATH:$JAVA_HOME/bin"
在 Windows 上,您必须在“我的电脑/高级/环境变量”中配置这些环境变量。

2.2 下载和安装

启动和运行 Grails 的第一步是安装发行版。

在 *nix 系统上安装 Grails 的最佳方法是使用 SDKMAN,它可以极大地简化多个 Grails 版本的安装和管理。

使用 SDKMAN 安装

要使用 SDKMAN 安装最新版本的 Grails,请在终端上运行以下命令

$ sdk install grails

您也可以指定版本

$ sdk install grails 6.2.0

您可以在 SDKMAN 文档 中找到有关 SDKMAN 使用的更多信息。

手动安装

对于手动安装,请按照以下步骤操作

  • 下载 Grails 的二进制发行版,并将生成的 zip 文件解压缩到您选择的位置。

  • GRAILS_HOME 环境变量设置为解压缩 zip 文件的位置。

Unix/Linux

  • 这通常需要在您的配置文件中添加类似以下内容:export GRAILS_HOME=/path/to/grails

  • 这可以通过将 export PATH="$PATH:$GRAILS_HOME/bin" 添加到您的配置文件来完成。

Windows

  • 复制您下载的 grails 文件夹中 bin 目录的路径,例如:

C:\path_to_grails\bin
  • 转到“环境变量”,您可以通常搜索或运行以下命令,键入 env,然后按 Enter 键。

Start + R
  • 根据您的选择,编辑“用户变量”/“系统变量”上的“Path”变量。

  • 将复制的路径粘贴到“Path”变量中。

如果 Grails 正常工作,您现在应该能够在终端窗口中键入 grails --version,并看到类似于以下内容的输出:

Grails Version: 6.2.0

2.3 创建应用程序

要创建 Grails 应用程序,您首先需要熟悉 grails 命令的使用,该命令的使用方式如下:

$ grails <<command name>>

运行 create-app 创建应用程序。

$ grails create-app myapp

这将在当前目录中创建一个包含该项目的新目录。在您的控制台中导航到此目录。

$ cd myapp

2.4 使用 Grails 创建简单的 Web 应用程序

步骤 1:创建一个新项目

打开您的命令提示符或终端。

导航到您要创建 Grails 项目的目录。

$ cd your_project_directory

使用以下命令创建一个新的 Grails 项目:

$ grails create-app myapp

步骤 2:访问项目目录

切换到您刚刚创建的“myapp”目录。

$ cd myapp

步骤 3:启动 Grails 交互式控制台

通过运行“grails”命令启动 Grails 交互式控制台。

$ grails

步骤 4:创建一个控制器

在 Grails 交互式控制台中,您可以使用自动完成功能创建控制器。键入以下命令以创建一个名为“greeting”的控制器:

grails> create-controller greeting

此命令将在 grails-app/controllers/myapp 目录中生成一个名为“GreetingController.groovy”的新控制器。您可能会想知道为什么会有一个额外的“myapp”目录。此结构与 Java 开发中常用的约定相一致,其中类被组织成包。Grails 会自动将应用程序名称作为包结构的一部分。如果您没有指定包,Grails 默认使用应用程序名称。

有关创建控制器的更多详细信息,您可以参考 create-controller 页面上的文档。

步骤 5:编辑控制器

在文本编辑器中打开位于“grails-app/controllers/myapp”目录中的“GreetingController.groovy”文件。

将以下代码添加到“GreetingController.groovy”文件中:

package myapp

class GreetingController {

    def index() {
        render "Hello, Congratulations for your first Grails application!"
    }
}

动作只是一个方法。在这种特殊情况下,它调用 Grails 提供的特殊方法来 渲染 页面。

步骤 6:运行应用程序

Grails 框架现在依赖 Gradle 任务来运行应用程序。要启动应用程序,请使用以下 Gradle bootRun 命令:

$ ./gradlew bootRun

默认情况下,您的应用程序将托管在端口 8080 上。您可以在 Web 浏览器中通过以下地址访问它:

现在,重要的是要知道欢迎页面是由以下 URL 映射决定的:

class UrlMappings {
    static mappings = {
        "/$controller/$action?/$id?(.$format)?"{
            constraints {
                // apply constraints here
            }
        }

        "/"(view:"/index")
        "500"(view:'/error')
        "404"(view:'/notFound')
    }
}

此映射指定根 URL (“/”) 应显示位于“grails-app/views/index.gsp”的“index.gsp”视图。此“index.gsp”文件充当您的欢迎页面或登录页面。映射中的其他条目处理 HTTP 状态代码 500 和 404 的错误页面。

基于控制器和操作名称的 Grails URL 约定

Grails 遵循一种依赖于控制器及其操作名称的 URL 约定。此约定简化了 Web 应用程序中各种页面或功能的创建和访问。

在提供的代码示例中

package myapp

class GreetingController {

    def index() {
        render "Hello, Congratulations for your first Grails application!"
    }
}
  • GreetingController 类表示 Grails 中的控制器。

  • 在控制器内部,定义了一个名为 index 的操作,它是一个方法。在 Grails 中,操作本质上是控制器中的方法,用于处理特定任务或响应用户请求。

现在,让我们了解 Grails URL 约定如何根据此控制器和操作进行工作。

  1. URL 中的控制器名称

    • 在这种情况下,控制器名称“GreetingController”用于 URL 中。但是,约定会将控制器名称的第一个字母大写,并删除“Controller”后缀。因此,“GreetingController”在 URL 中变为“greeting”。

  2. URL 中的操作名称

    • 默认情况下,如果您没有在 URL 中指定操作,Grails 会假定为“index”操作。因此,在此示例中,访问 URL /greeting

请参阅用户指南中 “控制器和操作” 部分的结尾,以详细了解默认操作。

可选:设置上下文路径

如果要为应用程序设置上下文路径,请在“grails-app/conf/application.yml”文件中创建一个配置属性:

server:
    servlet:
        context-path: /myapp

使用此配置,应用程序将在以下位置可用:

或者,您可以在使用 Gradle 运行 Grails 应用程序时从命令行设置上下文路径。以下是操作方法:

$ ./gradlew bootRun -Dgrails.server.servlet.context-path=/your-context-path

/your-context-path 替换为您 Grails 应用程序的所需上下文路径。此命令通过 -Dgrails.server.servlet.context-path 系统属性直接设置上下文路径。

例如,如果您希望应用程序在“http://localhost:8080/myapp”上可用,则可以使用以下命令:

$ ./gradlew bootRun -Dgrails.server.servlet.context-path=/myapp

这使您无需修改应用程序的配置文件即可配置上下文路径,使其成为使用 Gradle 运行 Grails 应用程序时的灵活便捷选项。

可选:更改服务器端口

如果端口 8080 已被占用,您可以使用 grails.server.port 系统属性在不同的端口上启动服务器:

$ ./gradlew bootRun -Dgrails.server.port=9090

将“9090”替换为您首选的端口。

Windows 用户注意事项

如果遇到与 Java 进程或文件名长度相关的错误,可以使用 --stacktrace 标志或将 grails { pathingJar = true } 添加到您的“build.gradle”文件中。

在 Windows 上,可能还需要将系统属性括在引号中:

./gradlew bootRun "-Dgrails.server.port=9090"

结论

当您在 Web 浏览器中访问 Grails 应用程序时,它现在将显示“您好,恭喜您创建了第一个 Grails 应用程序!”消息。

请记住,您可以创建多个控制器和操作,以使用 Grails 构建更复杂的 Web 应用程序。每个操作对应于一个不同的页面,可以通过基于控制器和操作名称的唯一 URL 访问。

2.5 使用交互模式

Grails 命令行界面 (CLI) 提供了一种交互模式,您可以通过在终端应用程序或 Linux 命令行中输入“grails”来访问它。

进入命令行界面后,您可以通过使用 TAB 键进行自动完成功能来提高效率。例如:

grails> create
create-app            create-plugin         create-webapp
create-controller     create-restapi
create-domain-class   create-web-plugin

此交互模式提供了一种便捷的方式来浏览可用的 Grails 命令和选项,使您的 Grails 开发工作流程更高效、更友好。

有关交互模式功能的更多信息,请参阅用户指南中有关 交互模式 的部分。

2.6 在 IDE 中进行设置

由于 Grails 构建于 Spring 框架(Spring Boot)、Gradle 构建工具和 Groovy 编程语言之上,可以使用大多数流行的 JVM 集成开发环境 (IDE) 来开发 Grails 应用程序。一些 IDE 提供了对 Grails 的更专门的支持,而另一些 IDE 则可能提供对管理依赖项/插件、运行 Gradle 任务、代码完成和语法高亮显示的基本支持。

1. IntelliJ IDEA

IntelliJ IDEA 是 Grails 开发中广泛使用的 IDE。它为 Groovy 和 Grails 提供了全面的支持,包括代码完成、智能代码分析以及与 Grails 工件的无缝集成等功能。

IntelliJ IDEA 还提供了强大的数据库工具,可以与 Grails 的 GORM(Grails 对象关系映射)无缝协作。它提供社区版(免费)和旗舰版(付费)两种版本,后者提供更高级的 Grails 支持,包括 Grails Forge 的嵌入式版本,以及对 GSP 和 JSON 视图的解析。

2. Visual Studio Code (VS Code)

Visual Studio Code 是由微软开发的一款轻量级开源代码编辑器。虽然它不是一个功能齐全的 IDE,但它为 Grails 和 Groovy 开发提供了强大的扩展。您可以安装 code-groovyGrails for VS Code 等扩展来增强您的 Grails 开发体验。

VS Code 提供了语法高亮、代码导航和集成终端支持等功能。对于喜欢轻量级和可定制开发环境的开发人员来说,这是一个很好的选择。

3. STS(Spring 工具套件)

Spring 工具套件 (STS) 是一套专为 Spring 框架开发而设计的 IDE 工具,其版本基于 VS Code 和 Eclipse。本节重点介绍 Eclipse 版本。

当与 Groovy 开发工具 插件(可以使用 Eclipse Marketplace 安装)一起使用时,STS 可以作为一个有效的 Grails 开发平台。STS 不提供对 Grails 工件或 GSP 视图的特定支持。

4. NetBeans

Apache NetBeans 不提供对 Grails 的特定支持,但它会将 Grails 应用程序作为 Gradle 项目导入,并为 Groovy 和 GSP 视图提供合理的编辑支持。

5. TextMate、VIM 等

有几种优秀的文本编辑器可以很好地与 Groovy 和 Grails 配合使用。以下是一些参考资料

  • 有一个 bundle 可用于在 TextMate 中支持 Groovy/Grails。

  • 可以通过 Sublime Package Control 为 Sublime Text 编辑器 安装一个 插件

  • emacs-grails 扩展为 Emacs 中的 Grails 开发提供了基本支持。

  • 请参阅 这篇文章,了解如何将 VIM 设置为您选择的 Grails 编辑器的一些有用技巧。

这些文本编辑器以及提供的扩展和配置可以增强您的 Groovy 和 Grails 开发体验,提供灵活性和可定制性以满足您的编码偏好。

2.7 Grails 目录结构和“约定优于配置”

Grails 采用“约定优于配置”的方法来配置自身。在这种方法中,使用文件名和位置来代替显式配置。因此,熟悉 Grails 提供的目录结构至关重要。以下是关键目录的细分以及相关部分的链接

  1. grails-app - Groovy 源代码的顶级目录

  2. src/main/groovy - 支持源代码

  3. src/test/groovy - 单元测试

  4. src/integration-test/groovy - 集成测试 - 用于在集成级别测试 Grails 应用程序。

了解此目录结构及其约定对于高效的 Grails 开发至关重要。

2.8 运行和调试应用程序

可以使用 bootRun 命令使用内置应用程序服务器执行 Grails 应用程序。默认情况下,它会在端口 8080 上启动服务器

$ ./gradlew bootRun

要指定不同的端口,您可以设置系统属性 -Dgrails.server.port,如下所示

$ ./gradlew bootRun -Dgrails.server.port=8081

要调试 Grails 应用程序,您有两个选择。您可以在 IDE 中右键单击 Application.groovy 类并选择相应的调试操作,或者可以使用以下命令运行应用程序,然后将远程调试器连接到该应用程序

$ ./gradlew bootRun --debug-jvm

有关 bootRun 命令的更多信息,请参阅 Grails 参考指南的 bootRun 部分

2.9 测试应用程序

Grails 提供了一个方便的功能,您可以使用 create-* 命令为您的应用程序自动生成单元测试和集成测试。这些生成的测试存储在 src/test/groovysrc/integration-test/groovy 目录中。但是,您有责任使用适当的测试逻辑填充这些测试。您可以在专门介绍 单元测试和集成测试 的部分中找到有关编写有效测试逻辑的全面指导。

要启动测试的执行,包括单元测试和集成测试,您可以使用 Gradle check 任务。请按照以下步骤操作

  1. 打开终端或命令提示符,并导航到您的 Grails 项目的根目录。

  2. 执行以下 Gradle 命令

    $ ./gradlew check

    通过运行 check 任务,您可以确保执行 Grails 项目中的所有测试,包括您创建并填充了测试逻辑的测试。这种全面的测试方法极大地提高了应用程序的健壮性和整体质量。

  3. **查看测试报告**:运行测试后,Grails 会生成测试报告,提供有关测试结果的宝贵见解。您通常可以在 Grails 项目的 build/reports/tests 目录中找到这些报告。在 Web 浏览器中打开这些报告,以查看有关测试结果的详细信息,包括通过、失败和跳过的测试。

请记住,测试不仅仅是一个过程;它是一种增强 Grails 应用程序可靠性的基本实践。查看测试报告可以帮助您分析和理解测试结果,从而更容易识别和解决任何问题。

通过遵循这些测试实践并查看测试报告,您可以放心地向用户交付高质量的 Grails 应用程序。

2.10 部署应用程序

Grails 应用程序提供多种部署选项。

对于传统的容器部署,例如 Tomcat 或 Jetty,您可以使用 Gradle war 任务生成 Web 应用程序存档 (WAR) 文件,如下所示

$ ./gradlew war

此任务会在 build/libs 目录中生成一个带有 -plain 后缀的 WAR 文件,以便根据您的容器指南进行部署。

默认情况下,war 任务在 production 环境中运行。您可以通过在 Gradle 命令中覆盖它来指定不同的环境,例如 development

$ ./gradlew -Dgrails.env=dev war

如果您不想使用单独的 Servlet 容器,则可以创建 Grails WAR 文件并将其作为常规 Java 应用程序运行

$ ./gradlew bootWar
$ java -jar build/libs/mywar-0.1.war

部署 Grails 时,请确保您的容器的 JVM 使用 -server 选项运行,并分配了足够的内存。以下是推荐的 VM 标志

-server -Xmx1024M

2.11 支持的 Java EE 容器

Grails 框架要求运行时容器支持 Servlet 3.0 及更高版本。默认情况下,Grails 框架应用程序捆绑了嵌入式 Tomcat 服务器。有关更多信息,请参阅本文档的 部署 部分。

此外,请阅读 Grails 指南,了解有关如何将 Grails 部署到各种流行云服务的提示。

2.12 创建工件

Grails 为各种任务提供了一组有用的 CLI 命令,包括创建基本工件,例如控制器和域类。这些命令简化了开发过程,尽管您可以使用您喜欢的集成开发环境 (IDE) 或文本编辑器来实现类似的结果。

例如,要创建应用程序的基础,您通常需要使用 Grails 命令生成域模型

$ grails create-app myapp
$ cd myapp
$ grails create-domain-class book

执行这些命令将导致在 grails-app/domain/myapp/Book.groovy 中创建一个域类,如下面的代码所示

package myapp

class Book {
}

Grails CLI 还提供了许多其他命令,您可以在 Grails 命令行参考指南中进行探索。

使用交互模式可以通过提供自动完成功能使开发体验更加顺畅。

2.13 生成应用程序

使用 Grails 脚手架快速入门

要快速启动您的 Grails 项目,您可以使用 runCommand Gradle 任务。此任务允许您快速生成应用程序的基本结构。具体来说,当运行以下命令时,您可以为您的应用程序创建一个 控制器(包括其单元测试)和关联的 视图

$ ./gradlew runCommand -Pargs="generate-all myapp.Book"