【发布时间】:2016-01-18 14:34:29
【问题描述】:
当我从命令行在 RedHat 6 上执行以下命令时,它运行良好:
java -cp /my/dir/Dep1.jar:/my/dir/Dep2.jar:/my/dir/MainJar.jar one.of.my.classes.Class1 <args> > log.txt
但是,当我执行以下脚本test1.sh(有755个权限)时:
#!/bin/sh
export JEXE="java"
export JBDIR="/my/dir"
export ARGS="<args>"
export JARS="${JBDIR}/Dep1.jar:${JBDIR}/Dep2.jar:${JBDIR}/MainJar.jar"
export CLASSPATH=""
for f in `ls ${JBDIR}/*.jar`
do
export CLASSPATH=$CLASSPATH:$f
done
cd "${JBDIR}"
"${JEXE}" -cp "${JARS}" one.of.my.classes.Class1 "${ARGS}" > log.txt
作为来自命令行的./test1.sh,我得到Could not find or load main class。我做错了什么?
更新:
- 很抱歉对原始问题的编辑不当。已更正。
-
echo产生java -cp /my/dir/Dep1.jar:/my/dir/Dep2.jar:/my/dir/MainJar.jar one.of.my.classes.Class1 <args> - 我添加了建筑
CLASSPATH试图让脚本工作。删除它没有效果,即我得到了同样的错误。 - JAR 是否有可能构建不正确?我通过从 Eclipse 运行 ant 构建来生成它。
【问题讨论】:
-
你能echo完整生成的命令行吗?什么是 JARGS?哦.... JARS 的错字? ^^
-
JARGS 拼写错误 -> 缺少 jar -> 缺少主类。案件结案。
-
@GergelyBacso 没那么快,哥伦布。
-
使用
${JEXE} ${JARS} one.of.my.classes.Class1 ${ARGS} > log.txt -
添加到
CLASSPATH,然后在同一个列表中使用-cp是多余的,只需使用-cp来限制副作用。
标签: java shell classpath redhat