Apache Turbine 常用 CLI 命令与工具详解
汇总 Apache Turbine 7.0 常用命令:Maven 生成、编译与 WAR 打包,内嵌 Jetty 与 Tomcat 11 启停管理,数据库初始化、curl 验证与 JVM 堆诊断,全部附真实实测回显。
Apache Turbine 常用 CLI 命令与工具详解
本文汇总 Apache Turbine 7.0(JDK 17 + jakarta.servlet 6.1.0)从生成工程到运行验证的常用命令,全部回显取自 Ubuntu 22.04 / CentOS 8 真实服务器实测记录。
一、命令总览
| 类别 | 命令 | 用途 |
|---|---|---|
| Maven 构建 | mvn archetype:generate | 用官方 archetype 生成工程骨架 |
| Maven 构建 | mvn compile | 编译 Java 源码到 target/classes |
| Maven 构建 | mvn package -DskipTests | 打包 WAR |
| Maven 构建 | mvn integration-test | 编译 + Torque 生成 + 建库灌数据 |
| Maven 构建 | mvn clean | 清理 target |
| 运行 | mvn jetty:run | 内嵌 Jetty 启动(默认 8081) |
| 运行 | /opt/tomcat/bin/startup.sh 等 | 独立 Tomcat 11 启停 |
| 数据库 | mysql -u root turbine -e ... | 建库、验证表与账号数据 |
| 验证 | curl | 默认页、登录、错误口令、自建页面验证 |
| 诊断 | jps -v / ps -ef | JVM 进程与堆参数核对 |
| 诊断 | ss -tlnp | 端口监听核对 |
二、Maven 工程与构建命令
2.1 生成工程(mvn archetype:generate)
cd /root
mvn archetype:generate \
-DarchetypeGroupId=org.apache.turbine \
-DarchetypeArtifactId=turbine-webapp \
-DarchetypeVersion=7.0 \
-DgroupId=com.example \
-DartifactId=turbine-demo \
-Dversion=1.0.0 \
-Dpackage=com.example \
-DinteractiveMode=false
实测回显(尾部,CentOS 8 / Maven 3.9.9):
[INFO] Parameter: db, Value: mysql
[INFO] Project created from Archetype in dir: /root/turbine-demo
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.559 s
[INFO] Finished at: 2026-10-12T12:41:46Z
[INFO] ------------------------------------------------------------------------
注意:Turbine 7.0 的父 POM 要求 Maven ≥ 3.9.6,低版本会在 enforcer 阶段失败。
2.2 编译(mvn compile)
cd /root/turbine-demo
mvn compile
编译器实测日志节选(93 个源文件,release 17 目标):
[INFO] Compiling 93 source files with javac [forked debug release 17] to target/classes
产物位于 target/classes,自建 Screen 类编译后确认:
ls target/classes/com/example/modules/screens/HelloTurbine.class
2.3 打包 WAR(mvn package)
mvn package -DskipTests
查看产物(实测大小约 32MB,含 Turbine/Fulcrum 全部依赖):
ls -la target/*.war
实测回显:
-rw-r--r-- 1 root root 32054968 Oct 12 12:30 target/turbine-demo-1.0.0.war
2.4 初始化数据库(mvn integration-test)
pom 中 sql-maven-plugin 的 create-db / create-data 两个 execution 绑定在 pre-integration-test 阶段,会按 Torque 生成的 SQL 建表并灌入种子数据(前提:MariaDB 已启动且 turbine 库、db_user 账号已创建):
mvn integration-test
验证结果:
mysql -u root turbine -e "show tables;"
mysql -u root turbine -e "select USER_ID,LOGIN_NAME from TURBINE_USER;"
实测回显:
AUTHOR
BOOK
ID_TABLE
TURBINE_GROUP
TURBINE_PERMISSION
TURBINE_ROLE
TURBINE_ROLE_PERMISSION
TURBINE_USER
TURBINE_USER_GROUP_ROLE
USER_ID LOGIN_NAME
1 admin
3 anon
2 user
2.5 清理(mvn clean)
mvn clean
删除 target/ 全部产物,用于干净重建。
三、内嵌 Jetty 启动与停止
3.1 启动(mvn jetty:run)
通过 MAVEN_OPTS 限定堆 256–512MB,后台运行并落日志:
cd /root/turbine-demo
MAVEN_OPTS='-Xms256m -Xmx512m' nohup mvn jetty:run > /root/jetty.log 2>&1 &
就绪判定(实测回显):
grep -E 'Started ServerConnector|Started oejs' /root/jetty.log
[INFO] Started ServerConnector@39124055{HTTP/1.1, (http/1.1)}{0.0.0.0:8081}
[INFO] Started oejs.Server@377d66f{STARTING}[12.0.22,sto=0] @56049ms
3.2 查看监听与进程
ss -tlnp | grep 8081
实测回显:
LISTEN 0 50 *:8081 *:* users:(("java",pid=1946,fd=344))
3.3 停止
mvn jetty:run 为前台进程组,后台启动后按进程停止:
ps -ef | grep '[j]ava' | grep maven.home
kill <PID>
或直接终止 Maven 启动器(方括号写法可避免 grep 匹配到查找命令自身):
pkill -f 'plexus.classworlds.lau[ncher]'
停止后 ss -tlnp | grep 8081 无输出即已释放。
四、独立 Tomcat 11 管理命令
4.1 部署 WAR
cp /root/turbine-demo/target/turbine-demo-1.0.0.war /opt/tomcat/webapps/turbine-demo.war
4.2 堆参数(setenv.sh)
echo 'CATALINA_OPTS="-Xms256m -Xmx512m"' > /opt/tomcat/bin/setenv.sh
4.3 启动与停止
/opt/tomcat/bin/startup.sh
实测回显:
Tomcat started.
停止:
/opt/tomcat/bin/shutdown.sh
4.4 查看版本
/opt/tomcat/bin/version.sh
实测回显(节选):
Server version: Apache Tomcat/11.0.10
JVM Version: 17.0.20.1+1-1-22.04-Ubuntu
JVM Vendor: Ubuntu
4.5 日志
访问日志与启动日志在 /opt/tomcat/logs/(catalina.out、localhost_access_log.*.txt);应用自身日志在应用目录 logs/ 下(turbine.log、velocity.log 等)。
五、curl 验证命令
5.1 默认页
curl -s http://localhost:8081/app | grep -oE '<title>[^<]*</title>'
实测回显:
<title>Sample Apache Turbine Application</title>
响应头核对(Jetty 12 + HTTP 200):
curl -s -o /dev/null -w 'HTTP %{http_code}\n' http://localhost:8081/app
HTTP 200
5.2 登录(正确口令)
演示账号 admin,密码 q1w2e3r4:
curl -s -i -c /tmp/ck.txt -d 'username=admin&password=q1w2e3r4' http://localhost:8081/app/action/LoginUser | head -4
实测回显:
HTTP/1.1 200 OK
Server: Jetty(12.0.22)
Date: Mon, 12 Oct 2026 12:13:46 GMT
Set-Cookie: JSESSIONID=node0y53h31o6si1tq9y9ys9bzycq1.node0; Path=/; Expires=Mon, 12 Oct 2026 13:13:46 GMT; Max-Age=3600
登录态确认(输出 1 表示首页出现 Logout 链接):
curl -s -b /tmp/ck.txt http://localhost:8081/app/template/Index.vm | grep -c Logout
5.3 登录(错误口令)
curl -s -d 'username=admin&password=wrongpass' http://localhost:8081/app/action/LoginUser | grep -oE 'Sorry your username[^<]*'
实测回显:
Sorry your username or password is incorrect!
5.4 Intake 表单登录
登录页第二个表单走 Intake 校验,字段名由 intake.xml 的组键渲染(login_0u/login_0p):
curl -s -c /tmp/ik.txt -d 'login_0u=admin&login_0p=q1w2e3r4&eventSubmit_doPerform=1' http://localhost:8081/app/action/LoginUserIntake/template/Login.vm -o /dev/null -w '%{http_code}\n'
curl -s -b /tmp/ik.txt http://localhost:8081/app/template/Index.vm | grep -c Logout
实测依次返回 200 与 1。
5.5 自建 Screen 页面
curl -s http://localhost:8081/app/template/HelloTurbine.vm | grep -E 'Hello Turbine|anon'
实测回显:
<h2>Hello Turbine!</h2>
<p>当前登录用户:anon</p>
5.6 登出
curl -s -b /tmp/ck.txt http://localhost:8081/app/action/LogoutUser -o /dev/null -w '%{http_code}\n'
六、数据库命令
mysql -u root -e "CREATE DATABASE turbine CHARACTER SET utf8mb4;"
mysql -u root -e "CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'db_password';"
mysql -u root -e "GRANT ALL PRIVILEGES ON turbine.* TO 'db_user'@'localhost';"
mysql -u root -e "select LOGIN_NAME,PASSWORD_VALUE from turbine.TURBINE_USER;"
服务管理(每条命令仅操作一个服务单元):
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
实测 systemctl is-active mariadb 回显:
active
七、JVM 与进程诊断
堆参数核对(jps 输出包含 -Xms256m -Xmx512m 即生效):
jps -v | grep -v Jps
实测回显:
7746 Launcher -Xms256m -Xmx512m -Dclassworlds.conf=/opt/maven/bin/m2.conf -Dmaven.home=/opt/maven -Dlibrary.jansi.path=/opt/maven/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/root/turbine-demo
ps -ef | grep '[j]ava' | grep -oE '\-Xm[sx][0-9a-z]+'
-Xms256m
-Xmx512m
Tomcat 进程(jps 中显示为 Bootstrap):
7998 Bootstrap ... -Xms256m -Xmx512m -Dcatalina.base=/opt/tomcat ...
八、常见问题
**Q1:**mvn archetype:generate 卡在下载或失败?
确认服务器可访问 repo.maven.apache.org 与 archive.apache.org;首次执行需下载 archetype 依赖,耗时约 1 分钟属正常。
**Q2:**mvn integration-test 报 enforcer / Maven 版本错误?
Turbine 7.0 要求 Maven ≥ 3.9.6。实测报错有三种形态:The plugin ... requires Maven version 3.6.3(3.5.4 时)、Detected Maven Version: 3.6.3 is not in the allowed range [3.9.6,)(3.6.3 时)。安装 Maven 3.9.9 并确认 PATH。
**Q3:**jetty:run 启动后 curl 不通?
首次启动 Maven 需下载 Jetty 插件依赖,约 1–2 分钟;用 tail -f /root/jetty.log 看到 Started oejs.Server 后再验证,并确认 ss -tlnp | grep 8081 有监听。
**Q4:**curl 登录返回 200 但访问受保护页仍跳登录?
检查是否带上了 -c/-b 会话 Cookie;JSESSIONID 需要在同一会话内传递。
**Q5:**如何以干净状态重新部署?
依次执行 pkill -f 'plexus.classworlds.lau[ncher]'、mvn clean、删除 MariaDB 中 turbine 库后重建(DROP DATABASE turbine; 再执行 4.x 步骤),最后重新 mvn integration-test 与 mvn jetty:run。
九、参考链接
- Turbine 7.0 官方文档:https://turbine.apache.org/turbine/turbine-7-0/
- Turbine 7.0 快速上手:https://turbine.apache.org/turbine/turbine-7-0/getting-started.html
- Maven 官方文档:https://maven.apache.org/guides/index.html
- Maven Central 上的 turbine 7.0:https://central.sonatype.com/artifact/org.apache.turbine/turbine/7.0
- 官方 archetype 仓库:https://github.com/apache/turbine-archetypes
- 官方代码仓库(turbine-core):https://github.com/apache/turbine-core
- Apache Tomcat 11 文档:https://tomcat.apache.org/tomcat-11.0-doc/
- Eclipse Jetty 文档:https://jetty.org/docs/jetty/12/index.html