Ubuntu 22.04 安装 Apache Grails 指南

面向 Ubuntu 22.04 服务器,讲解 Apache Grails 6.2.3 的 JDK 前置条件与 OpenJDK 17 安装,演示二进制包安装、grails --version 验证、最小应用启动与真实 HTTP 回显及卸载。

Apache GrailsApache Grails安装部署JavaApacheUbuntu 22.042026/10/12

Ubuntu 22.04 安装 Apache Grails 指南

Apache Grails 是基于 Groovy 的全栈 Web 框架,构建在 Spring Boot 之上,通过 grails CLI 完成工程脚手架、运行与打包。本文在 Ubuntu 22.04 服务器上完成 JDK 与 Grails 的安装,并创建一个最小应用进行真实验证。示例登录账号统一为 root / q1w2e3r4。

一、环境与前置条件

1.1 系统要求

项目要求
操作系统Ubuntu 22.04 LTS(x86_64)
JDKJDK 11 或 JDK 17(Grails 6.x 官方支持)
内存建议 ≥ 2GB(运行应用时 JVM 堆 256–512MB)
磁盘建议 ≥ 5GB(含 Gradle 与依赖缓存)
网络可访问 Maven 中央仓库与 Gradle 发行包地址

本文实测环境为 Ubuntu 22.04.5 LTS,最终安装 Grails 6.2.3 + OpenJDK 17.0.20.1。

1.2 前置工具

sudo apt-get update -qq
sudo apt-get install -y curl unzip zip git ca-certificates

1.3 网络受限说明

部分环境无法直连 github.com(实测连接超时),而 Grails 官方二进制包托管在 GitHub Release。此时可改用可达的加速镜像拉取,下载地址与校验方式保持一致。若服务器可直连 GitHub,则可直接使用官方原始地址。

二、安装 JDK

2.1 安装 OpenJDK 17

sudo apt-get install -y openjdk-17-jdk

2.2 验证 Java

java -version

实测回显:

openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)

如系统安装多版本 JDK,可通过 update-alternatives 切换:

sudo update-alternatives --config java

三、安装 Apache Grails

Grails 提供两种主流安装方式:SDKMAN 版本管理器与官方二进制包。两者结果一致,任选其一。

3.1 方式一:二进制包安装(推荐,网络受限时首选)

# 1) 创建安装目录
sudo mkdir -p /opt/grails-dl

# 2) 下载 Grails 6.2.3 二进制包(GitHub 不可达时使用加速镜像前缀)
curl -L -m 300 --retry 2 -o /opt/grails-dl/grails-6.2.3.zip \
  "https://gh-proxy.com/https://github.com/apache/grails-core/releases/download/v6.2.3/grails-6.2.3.zip"

# 3) 解压到 /opt
cd /opt && sudo unzip -q /opt/grails-dl/grails-6.2.3.zip -d /opt/

实测下载包大小约 172MB,解压后目录为 /opt/grails-6.2.3。

3.2 配置环境变量

sudo tee /etc/profile.d/grails.sh >/dev/null <<'EOF'
export GRAILS_HOME=/opt/grails-6.2.3
export PATH=$GRAILS_HOME/bin:$PATH
EOF

source /etc/profile.d/grails.sh

验证环境变量:

echo $GRAILS_HOME
# /opt/grails-6.2.3

3.3 方式二:SDKMAN 安装

服务器可直连 github.com 时,可用 SDKMAN 安装并管理多版本:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install grails 6.2.3

实测说明:SDKMAN 安装脚本本身可下载,但其下载 broker 会重定向至 github.com, 在 GitHub 不可达环境中会报 curl: (7) Failed to connect to github.com port 443, 此时请改用 3.1 的二进制包方式。

四、验证安装

grails --version

实测回显:

| Grails Version: 6.2.3
| JVM Version: 17.0.20.1

同时可确认 CLI 可用:

grails help

将打印 Usage、示例命令与全部可用命令列表(create-app、run-app、generate-all、assemble 等)。

五、创建并运行最小应用

5.1 创建应用

mkdir -p /root/grails-lab && cd /root/grails-lab
grails create-app demoapp

实测回显:

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

生成的工程目录包含:

demoapp/
├── build.gradle          # Gradle 构建脚本
├── gradle.properties
├── gradlew / gradlew.bat # Gradle Wrapper
├── grailsw / grails-wrapper.jar
├── grails-app/
│   ├── conf/application.yml   # 主配置(profile=web,H2 数据源)
│   ├── controllers/           # 控制器
│   ├── domain/                # GORM 域类
│   ├── views/                 # GSP 视图
│   └── init/
└── src/                       # Groovy/Java 源码与测试

5.2 启动应用

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

首次运行会下载 Gradle 发行包与依赖(实测约 8 分钟),随后启动内嵌 Tomcat:

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

5.3 访问验证

另开终端采集真实 HTTP 响应:

curl -i http://localhost:8080/

实测回显(节选):

HTTP/1.1 200
Content-Type: text/html;charset=UTF-8

<title>Welcome to Grails</title>

5.4 创建控制器并验证路由

grails create-controller Hello

编辑 grails-app/controllers/demoapp/HelloController.groovy:

package demoapp

import grails.converters.JSON

class HelloController {
    def index() {
        render([status: "ok", framework: "Apache Grails", version: "6.2.3"] as JSON)
    }
}

访问 http://localhost:8080/hello(开发模式下自动热重载):

curl -i http://localhost:8080/hello

实测回显:

HTTP/1.1 200
Content-Type: application/json;charset=UTF-8

{"status":"ok","framework":"Apache Grails","version":"6.2.3"}

5.5 停止应用

grails stop-app

实测回显:

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

停止后 curl http://localhost:8080/ 返回 Connection refused,端口已释放。

六、卸载

6.1 二进制包方式卸载

rm -rf /opt/grails-6.2.3
sudo rm -f /etc/profile.d/grails.sh
unalias grails 2>/dev/null; hash -r

清理 Gradle 缓存(可选,释放磁盘):

rm -rf ~/.gradle

6.2 SDKMAN 方式卸载

sdk uninstall grails 6.2.3
rm -rf ~/.sdkman

6.3 卸载 JDK(可选)

sudo apt-get remove -y --purge openjdk-17-jdk
sudo apt-get autoremove -y

6.4 验证卸载

command -v grails   # 应无输出
ls -d /opt/grails-6.2.3   # 应提示 No such file or directory

七、常见问题

Q1:grails --version 报找不到 java? 确认 java -version 正常,且 JAVA_HOME(如设置)指向有效 JDK;必要时执行 sudo update-alternatives --config java 指定 JDK 17。

Q2:create-app 或 run-app 卡在下载? 首次运行需从 Maven 中央仓库与 Gradle 发行地址拉取依赖,网络受限时可配置镜像仓库或在可达网络中预热 ~/.gradle 缓存。

Q3:8080 端口被占用? 在 grails-app/conf/application.yml 中修改 server.port,或启动前设置 SERVER_PORT 环境变量。

Q4:生产部署用哪个命令打包? Grails 6.x 没有 war 命令,使用 grails assemble 生成 JAR/WAR 归档。