【问题标题】:Java runs OK from command line, but gives "Could not find or load main class" from shell scriptJava 从命令行运行正常,但从 shell 脚本给出“无法找到或加载主类”
【发布时间】: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。我做错了什么?

更新:

  1. 很抱歉对原始问题的编辑不当。已更正。
  2. echo 产生 java -cp /my/dir/Dep1.jar:/my/dir/Dep2.jar:/my/dir/MainJar.jar one.of.my.classes.Class1 &lt;args&gt;
  3. 我添加了建筑CLASSPATH 试图让脚本工作。删除它没有效果,即我得到了同样的错误。
  4. JAR 是否有可能构建不正确?我通过从 Eclipse 运行 ant 构建来生成它。

【问题讨论】:

  • 你能echo完整生成的命令行吗?什么是 JARGS?哦.... JARS 的错字? ^^
  • JARGS 拼写错误 -> 缺少 jar -> 缺少主类。案件结案。
  • @GergelyBacso 没那么快,哥伦布。
  • 使用${JEXE} ${JARS} one.of.my.classes.Class1 ${ARGS} &gt; log.txt
  • 添加到CLASSPATH,然后在同一个列表中使用-cp是多余的,只需使用-cp来限制副作用。

标签: java shell classpath redhat


【解决方案1】:

我添加后脚本工作了

export PATH=$PATH:<path to java directory>

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2014-01-23
    相关资源
    最近更新 更多