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

汇总 Apache Turbine 7.0 常用命令:Maven 生成、编译与 WAR 打包,内嵌 Jetty 与 Tomcat 11 启停管理,数据库初始化、curl 验证与 JVM 堆诊断,全部附真实实测回显。

Apache TurbineApache Turbine2026/10/12

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 -efJVM 进程与堆参数核对
诊断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。

九、参考链接

  1. Turbine 7.0 官方文档:https://turbine.apache.org/turbine/turbine-7-0/
  2. Turbine 7.0 快速上手:https://turbine.apache.org/turbine/turbine-7-0/getting-started.html
  3. Maven 官方文档:https://maven.apache.org/guides/index.html
  4. Maven Central 上的 turbine 7.0:https://central.sonatype.com/artifact/org.apache.turbine/turbine/7.0
  5. 官方 archetype 仓库:https://github.com/apache/turbine-archetypes
  6. 官方代码仓库(turbine-core):https://github.com/apache/turbine-core
  7. Apache Tomcat 11 文档:https://tomcat.apache.org/tomcat-11.0-doc/
  8. Eclipse Jetty 文档:https://jetty.org/docs/jetty/12/index.html