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

整理 Apache Wicket 开发与运行常用的 Maven、JDK、Tomcat 与 curl 命令,覆盖脚手架生成、编译打包、内嵌 Jetty 启动、依赖树、war 部署与会话验证,每条命令附真实实测输入输出。

Apache WicketApache Wicket2026/10/12

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

Apache Wicket 以 Maven 库形态使用,日常命令集中在 Maven 构建、JDK 自带工具、Servlet 运行环境脚本与 curl 验证四类。本文逐条列出这些命令的用途、输入与真实输出,全部来自两台服务器的实测(Ubuntu 22.04 内嵌 Jetty 场景与 CentOS 8 Tomcat 场景)。

一、环境信息

项目环境 A环境 B
操作系统Ubuntu 22.04.5 LTSCentOS Linux 8(8.5.2111 源)
JDKOpenJDK 17.0.20.1OpenJDK 17.0.1+12-LTS
Maven3.6.3(apt)3.9.16(官方二进制包)
Apache Wicket10.11.010.11.0
运行方式内嵌 Jetty 11.0.24Tomcat 10.1.61
示例工程/root/lab/wicket-demo(war 打包)同左,部署名 wicket-demo

二、工具概览

工具所属用途
mvnMaven工程脚手架、编译打包、启动、依赖分析
java、jps、javapJDK版本确认、进程与 JVM 参数查看、类签名查看
version.sh、startup.sh、shutdown.shTomcat版本查看、启动、停止
curl系统包页面、表单、会话与本地化验证

三、前置条件

  1. 已安装 JDK 17 与 Maven,且 wicket-core 依赖可从 Maven Central 正常下载。
  2. 工程为 war 打包形态,包含 WicketApplication 与 web.xml。
  3. 以下命令均在工程根目录 /root/lab/wicket-demo 下执行(另注明的除外)。

四、工具详解

4.1 mvn -version:确认构建环境

mvn -version

实测回显(环境 A):

Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 17.0.20.1, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-amd64

实测回显(环境 B):

Apache Maven 3.9.16 (2bdd9fddda4b155ebf8000e807eb73fd829a51d5)
Maven home: /opt/apache-maven-3.9.16
Java version: 17.0.1, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64

4.2 java -version 与 jps -v:运行时确认与堆参数验证

java -version

实测回显(环境 A):

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)

应用启动后用 jps -v 查看进程及其 JVM 参数(验证 256 至 512MB 堆设置是否生效),环境 B 实测回显(节选):

jps -v | grep -v Jps
677 Bootstrap -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dsun.io.useCanonCaches=false -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.rmi/sun.rmi.transport=ALL-UNNAMED -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp

环境 A(内嵌 Jetty 随 Maven 进程运行)实测回显:

9205 Launcher -Xms256m -Xmx512m -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven -Dlibrary.jansi.path=/usr/share/maven/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/root/lab/wicket-demo

4.3 mvn archetype:generate:生成 Wicket 工程脚手架

mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -DarchetypeArtifactId=wicket-archetype-quickstart -DarchetypeVersion=10.11.0 -DgroupId=com.example -DartifactId=wicket-quickstart -Dversion=1.0.0 -DinteractiveMode=false

实测回显(节选):

[INFO] --- maven-archetype-plugin:3.4.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] Archetype repository not defined. Using the one from [org.apache.wicket:wicket-archetype-quickstart:10.11.0] found in catalog remote
[INFO] Using following parameters for creating project from Archetype: wicket-archetype-quickstart:10.11.0
[INFO] Project created from Archetype in dir: /root/lab/wicket-quickstart
[INFO] BUILD SUCCESS

生成的工程自带 WicketApplication、HomePage、Start 启动类与 Jetty 插件配置,可直接构建运行。

4.4 mvn clean package:编译打包 war

mvn clean package

实测回显(节选):

[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ wicket-demo ---
[INFO] Building war: /root/lab/wicket-demo/target/wicket-demo.war
[INFO] BUILD SUCCESS
[INFO] Total time:  2.226 s

确认产物:

ls -la target/wicket-demo.war

实测回显:

-rw-r--r-- 1 root root 6723275 Oct 12 09:34 target/wicket-demo.war

注意 pom.xml 中需固定 maven-war-plugin 3.5.1,否则 Maven 3.6.3 默认解析的 2.2 版在 JDK 17 下会报 Cannot access defaults field of Properties 错误。

4.5 mvn jetty:run:以 Jetty 插件启动(脚手架工程自带配置)

在 archetype 生成的工程内执行:

MAVEN_OPTS="-Xms256m -Xmx512m" mvn jetty:run

实测回显(关键行):

[main] INFO org.apache.wicket.protocol.http.WebApplication - [wicket.wicket-quickstart] Started Wicket version 10.11.0 in DEVELOPMENT mode
[INFO] Started o.e.j.m.p.MavenWebAppContext@6b867ee7{wicket-quickstart,/,[file:///root/lab/wicket-quickstart/src/main/webapp/],AVAILABLE}
[INFO] Started ServerConnector@284bdeed{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
[INFO] Started ServerConnector@7e7740a5{SSL, (ssl, http/1.1)}{0.0.0.0:8443}
[INFO] Started Server@5012c571{STARTING}[11.0.24,sto=0] @63577ms

验证(另开终端):

curl -s -o /dev/null -w "HTTP=%{http_code}\n" http://127.0.0.1:8080/

实测回显:

HTTP=200

停止方式:在 mvn 所在终端按 Ctrl+C,或结束对应 Maven 进程。

4.6 mvn exec:java:以指定主类启动内嵌 Jetty

适用于自建工程中自带 Start 启动类的场景:

MAVEN_OPTS="-Xms256m -Xmx512m" nohup mvn org.codehaus.mojo:exec-maven-plugin:3.5.0:java -Dexec.mainClass=com.example.Start > /root/lab/demo.log 2>&1 &

启动日志出现运行模式警告横幅即表示就绪:

*** WARNING: Wicket is running in DEVELOPMENT mode.              ***

4.7 mvn dependency:tree:查看依赖树

mvn dependency:tree

实测回显(节选,环境 A):

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ wicket-demo ---
[INFO] com.example:wicket-demo:war:1.0.0
[INFO] +- org.apache.wicket:wicket-core:jar:10.11.0:compile
[INFO] |  +- com.github.openjson:openjson:jar:1.0.13:compile
[INFO] |  +- org.apache.wicket:wicket-request:jar:10.11.0:compile
[INFO] |  +- org.apache.wicket:wicket-util:jar:10.11.0:compile
[INFO] |  |  +- commons-io:commons-io:jar:2.21.0:compile
[INFO] |  |  +- org.apache.commons:commons-collections4:jar:4.5.0:compile
[INFO] |  |  \- org.apache.commons:commons-fileupload2-jakarta-servlet5:jar:2.0.0-M5:compile
[INFO] |  +- org.danekja:jdk-serializable-functional:jar:1.9.0:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:2.0.17:compile
[INFO] +- org.eclipse.jetty:jetty-webapp:jar:11.0.24:compile

用于排查依赖冲突,例如确认 wicket-util 实际带入的 commons 版本。

4.8 Tomcat 脚本:version.sh、startup.sh、shutdown.sh

查看版本:

/opt/tomcat/bin/version.sh | head -4

实测回显:

Server version: Apache Tomcat/10.1.61
Server built:   Oct 6 2026 22:56:25 UTC
Server number:  10.1.61.0
OS Name:        Linux

部署 war 并启动:

cp /root/lab/wicket-demo/target/wicket-demo.war /opt/tomcat/webapps/
/opt/tomcat/bin/startup.sh

实测回显:

Tomcat started.

观察部署日志:

tail -2 /opt/tomcat/logs/catalina.out

实测回显:

12-Oct-2026 09:48:47.205 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
12-Oct-2026 09:48:47.218 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1174] milliseconds

停止:

/opt/tomcat/bin/shutdown.sh

4.9 curl:页面、表单、会话与本地化验证

首页访问(-c 保存会话,-L 跟随 302):

rm -f /tmp/ck.txt && curl -s -c /tmp/ck.txt -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8080/wicket-demo/

实测回显:

302
curl -s -b /tmp/ck.txt -L http://127.0.0.1:8080/wicket-demo/ | grep -o "<h1[^>]*>[^<]*"

实测回显:

<h1>Welcome, guest!

表单提交(--data-urlencode 处理中文与空格,参数名以页面渲染出的 name 属性为准):

A=$(grep -o "action=\"[^\"]*\"" /tmp/t1.html | head -1 | sed "s/action=\"//;s/\"//") && curl -s -b /tmp/ck.txt -L --data-urlencode "p::name=Li Si" "http://127.0.0.1:8080/wicket-demo/${A#./}" | grep -o "Hello[^<]*"

实测回显:

Hello, Li Si. The form has been submitted.

登录往返(账号 admin,密码 q1w2e3r4):

curl -s -b /tmp/ck.txt -L http://127.0.0.1:8080/wicket-demo/login -o /tmp/t2.html
B=$(grep -o "action=\"[^\"]*\"" /tmp/t2.html | head -1 | sed "s/action=\"//;s/\"//") && curl -s -b /tmp/ck.txt -L --data-urlencode "username=admin" --data-urlencode "password=q1w2e3r4" "http://127.0.0.1:8080/wicket-demo/login${B#./login}" | grep -o "Welcome[^<]*" | head -1

实测回显:

Welcome, admin!

本地化验证(新会话加 Accept-Language 请求头):

rm -f /tmp/ckzh.txt && curl -s -c /tmp/ckzh.txt -o /dev/null -H "Accept-Language: zh-CN" http://127.0.0.1:8080/wicket-demo/
curl -s -b /tmp/ckzh.txt -L -H "Accept-Language: zh-CN" http://127.0.0.1:8080/wicket-demo/ | grep -o "<h1[^>]*>[^<]*"

实测回显:

<h1>欢迎回来,访客!

五、注意事项

  1. mvn 命令涉及下载时首次执行明显变慢,属正常现象;失败重试前先确认网络与仓库地址。
  2. exec:java 与 jetty:run 均运行于 Maven 进程内,JVM 参数经 MAVEN_OPTS 传入,停止服务即结束 Maven 进程;war 部署场景则使用 CATALINA_OPTS。
  3. Wicket 默认 REDIRECT_TO_RENDER 策略下,curl 不加 -L 只能看到 302,容易误判为故障。
  4. 表单参数名必须取自页面实际渲染的 name 属性(实测首页回显输入框为 p::name),照抄组件 id 提交会得到必填校验错误。
  5. 修改 pom.xml 插件版本或 JVM 参数后,需重新打包或重启进程才生效。

六、常见问题

Q1:mvn package 报 Cannot access defaults field of Properties?

旧版 maven-war-plugin 与 JDK 17 不兼容,在 build/plugins 中固定 maven-war-plugin 3.5.1 后重新打包。

Q2:jps 找不到进程?

jps 只列出当前用户可见的 JVM。确认使用同一账号执行;Tomcat 进程名为 Bootstrap,内嵌启动场景进程名为 Launcher。

Q3:curl 拿到的会话与浏览器不一致?

会话绑定 Cookie 中的 JSESSIONID。每条 curl 命令都要携带同一 cookie 文件(首次 -c 保存,后续 -b 携带),否则服务端会新建会话。

Q4:jetty:run 端口被占用?

查找并结束占用 8080 的旧进程后再启动,或修改工程的 jetty 插件配置端口;Tomcat 场景则改 server.xml 中 http-nio-8080 连接器端口。

七、参考链接

  1. Maven 命令行参考:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
  2. Maven Archetype 插件:https://maven.apache.org/archetype/maven-archetype-plugin/
  3. Jetty Maven 插件:https://www.eclipse.org/jetty/documentation/jetty-11/jetty-maven-plugin.html
  4. Apache Tomcat 10.1 文档:https://tomcat.apache.org/tomcat-10.1-doc/
  5. curl 官方手册:https://curl.se/docs/manual.html