Linux环境运行MarkLogic CoRB脚本报错:无法找到主类
解决Linux上运行MarkLogic CoRB脚本时"找不到主类"的问题
以下是针对该问题的排查和解决步骤:
修正classpath分隔符:Windows下classpath用分号
;分隔,Linux必须用冒号:。如果是直接将Windows的.cmd脚本转成.sh,极易忽略这个替换,这是最常见的触发原因。比如原Windows命令:java -cp "marklogic-corb-2.5.4.jar;../MarkXCC.java-10.0.10/marklogic-xcc-10.0.10.jar" com.marklogic.developer.corb.Manager -DOPTIONS-FILE=options.properties转成Linux后需改为:
java -cp "marklogic-corb-2.5.4.jar:../MarkXCC.java-10.0.10/marklogic-xcc-10.0.10.jar" com.marklogic.developer.corb.Manager -DOPTIONS-FILE=options.properties验证jar包路径与权限:
- 在脚本中添加文件检查,确认jar包存在且当前用户可读:
若输出显示文件不存在,检查路径拼写;若权限为ls -l $HOME/corb/marklogic-corb-2.5.4.jar $HOME/MarkXCC.java-10.0.10/marklogic-xcc-10.0.10.jar-rw-------,说明当前用户无读取权限,执行chmod +r <jar文件路径>赋予读权限。 - 确保XCC jar的文件名完整,不能仅写目录——必须指定具体jar文件名,比如
marklogic-xcc-10.0.10.jar,而非仅$HOME/MarkXCC.java-10.0.10。
- 在脚本中添加文件检查,确认jar包存在且当前用户可读:
确认工作目录与相对路径:
你是cd $HOME/corb后运行脚本,所以脚本中若用相对路径引用jar包,需确保这些jar包在$HOME/corb目录下,或相对路径指向正确位置。比如XCC jar在$HOME/MarkXCC.java-10.0.10,相对路径应为../MarkXCC.java-10.0.10/marklogic-xcc-10.0.10.jar。锁定Java版本:
系统中可能存在多个Java版本,需确保脚本调用的是指定的openjdk 1.8.0_275:- 执行
which java获取当前java命令路径,再用/path/to/java -version验证版本。 - 在脚本中直接使用Java绝对路径,避免版本混淆,比如:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0_275.b01-1.el7_9.x86_64/bin/java -cp "..." com.marklogic.developer.corb.Manager ...
- 执行
完整脚本示例:
以下是健壮性较强的脚本模板,可直接参考:#!/bin/bash # 定义路径变量 CORB_DIR="$HOME/corb" CORB_JAR="$CORB_DIR/marklogic-corb-2.5.4.jar" XCC_JAR="$HOME/MarkXCC.java-10.0.10/marklogic-xcc-10.0.10.jar" OPTIONS_FILE="$CORB_DIR/options.properties" # 检查文件是否存在 check_file() { if [ ! -f "$1" ]; then echo "错误:文件不存在 - $1" exit 1 fi } check_file "$CORB_JAR" check_file "$XCC_JAR" check_file "$OPTIONS_FILE" # 执行CoRB命令 java -cp "$CORB_JAR:$XCC_JAR" com.marklogic.developer.corb.Manager -DOPTIONS-FILE="$OPTIONS_FILE"
内容的提问来源于stack exchange,提问作者Guy_Y
相关产品推荐
相关产品推荐

