Apache Jackrabbit 常用 CLI 命令与工具详解
Apache Jackrabbit 2.22.5 常用命令与工具详解:standalone 启动参数(java -jar --help)、WebDAV curl 操作(MKCOL/PUT/PROPFIND)、davE REST 读取、JPS/SS/LOG 等运维命令,全部含实测回显。
Apache Jackrabbit 常用 CLI 命令与工具详解
目标:汇总 Apache Jackrabbit 2.22.5 在真实服务器上最常用的命令行操作与工具——standalone 启动参数、
curl走 WebDAV/davE 的内容读写、jps -v/ss/日志等运维排查命令。每一条命令与回显均在真实 Ubuntu 22.04 + JDK 17 环境逐条实测。演示账号admin/q1w2e3r4。
一、环境信息
- 组件:Apache Jackrabbit
2.22.5(jackrabbit-standalone-2.22.5.jar) - JDK:OpenJDK
17(JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64) - 安装目录:
/opt/apache-jackrabbit/;仓库目录:/opt/data/jackrabbit/ - 服务地址:
http://localhost:8080 - 端点:WebDAV=
/repository/*,davE(JCR Remoting)=/server/* - 演示账号:
admin/q1w2e3r4
二、工具概览
| 工具 | 类型 | 用途 |
|---|---|---|
java -jar + --help | standalone CLI | 查询启动参数(见 4.1 完整回显) |
curl | HTTP 客户端 | 调 WebDAV(PROPFIND/MKCOL/PUT/GET)与 davE(GET)读写内容 |
javac / java -cp <jar>:... | JDK 编译/运行 | 跑 JCR 客户端代码做 workspace/节点管理 |
jps -v | JDK 工具 | 查看 Java 进程与生效的 JVM 参数 |
ss -lntp / ps -ef | 系统工具 | 端口与进程排查 |
tail / grep | 文本工具 | 查看 jackrabbit.log / access.log |
jar/unzip | 归档工具 | 抽取/查看 jar 内配置 |
三、前置条件
- 已按《Ubuntu 22.04 安装 Apache Jackrabbit 2.22.5 指南》完成部署并运行于 8080。
- 以下命令建议放在一个干净的 shell 会话逐条执行;涉及登录均用
admin/q1w2e3r4。 - 用
ss确认端口需先安装iproute2:apt-get install -y iproute2。 - 确认服务在运行:
ss -lntp | grep 8080
实测回显(8080 已被 Java 进程监听,监听地址 *:8080):
LISTEN 0 50 *:8080 *:* users:(("java",pid=5134,fd=130))
💡
ss来自iproute2;也可用netstat -lntp(来自net-tools)查看,见 4.6。
四、工具详解
4.1 standalone 启动参数(java -jar)
查看全部启动参数:
java -jar /opt/apache-jackrabbit/jackrabbit-standalone-2.22.5.jar --help
实测回显:
usage: java -jar jackrabbit-standalone-2.22.5.jar [-?] [-b] [-c <arg>] [-C
<arg>] [-d] [-f <arg>] [-h <arg>] [-i <arg>] [-l] [-n] [-p <arg>]
[-q] [-r <arg>] [-R <arg>]
-?,--help print this message
-b,--backup create a backup of the repository
-c,--conf <arg> repository configuration file
-C,--backup-conf <arg> backup repository configuration file
-d,--debug enable debug logging
-f,--file <arg> location of this jar file
-h,--host <arg> IP address of the HTTP server
-i,--cli <arg> command line access to a remote repository
-l,--license print license information
-n,--notice print copyright notices
-p,--port <arg> TCP port of the HTTP server (8080)
-q,--quiet disable console output
-r,--repo <arg> repository directory (jackrabbit)
-R,--backup-repo <arg> backup repository directory (jackrabbit-backupN)
后台启动(带 JVM 堆限制):
cd /opt/apache-jackrabbit
nohup $JAVA_HOME/bin/java -Xms256m -Xmx512m -Xmn128m \
-jar jackrabbit-standalone-2.22.5.jar \
-c /opt/apache-jackrabbit/conf/repository-fs.xml \
-r /opt/data/jackrabbit > /tmp/jr.log 2>&1 &
查看启动回显:
cat /tmp/jr.log
实测回显:
Using repository directory /opt/data/jackrabbit
Writing log messages to /opt/data/jackrabbit/log
Welcome to Apache Jackrabbit!
-------------------------------
Starting the server...
Apache Jackrabbit is now running at http://localhost:8080/
4.2 WebDAV 内容读写(curl)
创建集合(MKCOL,返回 201 Created):
curl -i -X MKCOL -u admin:q1w2e3r4 \
http://localhost:8080/repository/default/mydocs
实测回显:
HTTP/1.1 201 Created
Date: Sun, 11 Oct 2026 11:14:42 GMT
Content-Length: 0
写入文本资源(PUT,返回 201 Created):
curl -i -X PUT -u admin:q1w2e3r4 -H "Content-Type: text/plain" \
--data "Hello Jackrabbit!" \
http://localhost:8080/repository/default/mydocs/hello.txt
实测回显:
HTTP/1.1 201 Created
Date: Sun, 11 Oct 2026 11:14:42 GMT
Content-Length: 0
读回资源内容(GET):
curl -s -u admin:q1w2e3r4 \
http://localhost:8080/repository/default/mydocs/hello.txt
实测回显:
Hello Jackrabbit!
列出集合子资源(PROPFIND,Depth 1,返回多状态 207):
curl -s -X PROPFIND -H "Depth: 1" -u admin:q1w2e3r4 \
http://localhost:8080/repository/default/mydocs/ > /tmp/pf.xml
curl -s -o /dev/null -w "HTTP %{http_code}\n" \
-X PROPFIND -H "Depth: 1" -u admin:q1w2e3r4 \
http://localhost:8080/repository/default/mydocs/
回显中 HTTP 207,且响应体含 mydocs 与 hello.txt 的 <D:href> / <D:displayname>。
4.3 davE(JCR Remoting)读取
列出所有 workspace(本版本「管理台」入口):
curl -s -u admin:q1w2e3r4 http://localhost:8080/server/
实测回显:
<html><head><title>Jackrabbit 2.22.5</title></head><body><h2>Jackrabbit
2.22.5</h2><h3>Available Workspace Resources:</h3><ul><li><a
href="http://localhost:8080/server/default/">default</a></li><li><a
href="http://localhost:8080/server/security/">security</a></li><li><a
href="http://localhost:8080/server/ws_demo/">ws_demo</a></li></ul>
<hr><em>Powered by <a href="http://jackrabbit.apache.org/">Jackrabbit</a>
2.22.5</em></body></html>
读取 default workspace 根节点(davE 需带 jcr:root 前缀):
curl -s -u admin:q1w2e3r4 -H "Accept: application/json" \
http://localhost:8080/server/default/jcr%3aroot/
实测回显(XML 格式,jcr:primaryType = rep:root):
<?xml version="1.0" encoding="UTF-8"?><sv:node sv:name="jcr:root"
xmlns:rep="internal" xmlns:sv="http://www.jcp.org/jcr/sv/1.0" ...><sv:property
sv:name="jcr:primaryType" sv:type="Name"><sv:value>rep:root</sv:value></sv:property>
<sv:property sv:name="jcr:mixinTypes" sv:type="Name" sv:multiple="true"><sv:value>
rep:AccessControllable</sv:value></sv:property></sv:node>
4.4 JCR API 管理 workspace 与节点(javac + java)
写一个 JCR 客户端,创建 workspace ws_demo 并加节点 /api:
import javax.jcr.*;
import java.util.Arrays;
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.config.RepositoryConfig;
public class JcrOps {
public static void main(String[] args) throws Exception {
RepositoryConfig config = RepositoryConfig.create(
"/opt/apache-jackrabbit/conf/repository-fs.xml", "/opt/data/jackrabbit");
RepositoryImpl repo = RepositoryImpl.create(config);
Session session = repo.login(
new SimpleCredentials("admin", "q1w2e3r4".toCharArray()), "default");
Workspace ws = session.getWorkspace();
if (!Arrays.asList(ws.getAccessibleWorkspaceNames()).contains("ws_demo")) {
ws.createWorkspace("ws_demo");
System.out.println("CREATED_WORKSPACE name=ws_demo");
}
Node api = session.getRootNode().addNode("api", "nt:unstructured");
api.setProperty("author", "tester");
api.setProperty("version", "1.2");
session.save();
System.out.println("CREATED_NODE path=" + api.getPath());
session.logout();
repo.shutdown();
}
}
编译与运行(在服务停止时执行以避开仓库目录锁):
cd /opt/apache-jackrabbit
$JAVA_HOME/bin/javac -cp jackrabbit-standalone-2.22.5.jar JcrOps.java
$JAVA_HOME/bin/java -cp jackrabbit-standalone-2.22.5.jar:. JcrOps
实测回显:
== workspace list before ==
security
default
CREATED_WORKSPACE name=ws_demo
CREATED_NODE path=/api primaryType=nt:unstructured
== workspace list after ==
security
default
ws_demo
4.5 进程与 JVM 参数(jps -v)
$JAVA_HOME/bin/jps -v | grep jackrabbit
实测回显(可见堆参数 -Xms256m -Xmx512m -Xmn128m):
5134 jackrabbit-standalone-2.22.5.jar -Xms256m -Xmx512m -Xmn128m
按 JVM 集群信息看进程:
$JAVA_HOME/bin/jps -l | grep jackrabbit-standalone
4.6 端口与进程排查(ss / ps)
ss -lntp | grep 8080
ps -ef | grep jackrabbit-standalone | grep -v grep
ss 实测回显(同上,监听地址 *:8080):
LISTEN 0 50 *:8080 *:* users:(("java",pid=5134,fd=130))
ps 实测回显:
root 5134 1 2 11:23 ? 00:00:15 /usr/lib/jvm/java-17-openjdk-amd64/bin/java -Xms256m -Xmx512m -Xmn128m -jar jackrabbit-standalone-2.22.5.jar -c /opt/apache-jackrabbit/conf/repository-fs.xml -r /opt/data/jackrabbit
(未装 iproute2 时用 netstat -lntp 替代,实测回显:tcp6 0 0 :::8080 :::* LISTEN 5134/java)
4.7 日志查看(tail / grep)
# 实时应用日志
tail -f /opt/data/jackrabbit/log/jackrabbit.log
# 启动阶段 Jetty 端口绑定的关键行
grep -iE "Started ServerConnector|jackrabbit is now running" \
/opt/data/jackrabbit/log/jackrabbit.log
# 访问日志
tail -n 5 /opt/data/jackrabbit/log/access.log.$(date +%F)
访问日志实测回显:
127.0.0.1 - - [11/Oct/2026:11:14:42 +0000] "MKCOL /repository/default/mydocs HTTP/1.1" 201 0 "-" "curl/7.81.0"
4.8 抽取 jar 内配置(unzip)
# 查看 Main-Class
unzip -p /opt/apache-jackrabbit/jackrabbit-standalone-2.22.5.jar META-INF/MANIFEST.MF | grep -i main-class
# 查看/校验版本字符串
unzip -p /opt/apache-jackrabbit/jackrabbit-standalone-2.22.5.jar META-INF/MANIFEST.MF | grep -i bundle-version
bundle-version 实测为 2.22.5。
五、注意事项
- 写节点走 WebDAV(
MKCOL/PUT),读取/概览走 davE;davE 任意路径要用jcr:root前缀,否则返回 500。 - JCR 客户端改仓库需先停服务:
RepositoryImpl.create会锁/opt/data/jackrabbit/.lock,服务运行时并发打开会报「repository home ... in use since the file named .lock is locked」。 - 账号:所有登录用
admin/q1w2e3r4;工厂默认管理员密码为admin。 - JVM 堆:始终显式
-Xms/-Xmx,以jps -v确认真实生效值。
六、常见问题
Q1:curl http://localhost:8080/ 返回 503?
正常,standalone 无根欢迎页;请访问 /server/(workspace 概览)或 /repository/<workspace>/(WebDAV)。
Q2:WebDAV PROPFIND /repository/ 返回 404?
路径缺 workspace 段。正确写法是 /repository/<workspace>/...,如 /repository/default/ 返回 207。
Q3:davE /server/default/api 返回 500 Unexpected format of resource path?
缺 jcr:root 前缀,用 /server/default/jcr:root/api;或改用 WebDAV。
Q4:javac 报找不到类?
需带 -cp jackrabbit-standalone-2.22.5.jar,且 java -cp ...:. JcrOps 运行时也要带 jar 到 classpath(类名含包的定义在 fat jar 内)。
Q5:端口被占/起不来?
ss -lntp | grep 8080 确认占用;-p 换端口,同时检查 repository.xml 是否还残留 Derby 持久化(会启动失败)。
七、参考链接
- Apache Jackrabbit 官网:https://jackrabbit.apache.org/
- Jackrabbit 配置文档:https://jackrabbit.apache.org/archive/jcr-2.0/jackrabbit-2.22/config.html
- WebDAV RFC 4918:https://datatracker.ietf.org/doc/html/rfc4918
- JCR 2.0 规范:https://jcp.org/en/jsr/detail?id=283