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

Apache Jackrabbit 2.22.5 常用命令与工具详解:standalone 启动参数(java -jar --help)、WebDAV curl 操作(MKCOL/PUT/PROPFIND)、davE REST 读取、JPS/SS/LOG 等运维命令,全部含实测回显。

Apache JackrabbitApache Jackrabbit数据库Apache运维2026/10/11

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 + --helpstandalone CLI查询启动参数(见 4.1 完整回显)
curlHTTP 客户端调 WebDAV(PROPFIND/MKCOL/PUT/GET)与 davE(GET)读写内容
javac / java -cp <jar>:...JDK 编译/运行跑 JCR 客户端代码做 workspace/节点管理
jps -vJDK 工具查看 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 持久化(会启动失败)。

七、参考链接