【问题标题】:Issue running a java program from a batch script从批处理脚本运行 java 程序的问题
【发布时间】:2016-03-09 16:34:54
【问题描述】:

我有一个运行 java 程序的批处理脚本的问题,这里是脚本的一些关键行:

exeFinder="java -client -classpath './classes:./lib/javacsv.jar' -Xmx7200m Finder.Main ";
runFinder() {
    cleanFolders;
    $exeFinder $1 $2 $3 > $4;
}
dbName=$1;
k=$2;
n=$3;
outFile="simple_tester-out.log";

runFinder $dbName $k $n $outFile;

我使用它的参数运行脚本: ./myScript.sh testing_7x8.csv 7 8
我明白了:

Error: Could not find or load main class Finder.Main

看起来是java的问题,所以我把$exeFinder $1 $2 $3 > $4;换成echo "$exeFinder $1 $2 $3 > $4";得到我的执行行:

java -client -classpath './classes:./lib/javacsv.jar' -Xmx7200m Finder.Main  testing_7x8.csv 7 8 > simple_tester-out.log

它就像一个魅力!所以我不知道发生了什么。

我检查了一些问题,例如thisthis,但我看不到任何对我有用的东西。

感谢您的宝贵时间,伙计们

【问题讨论】:

  • 对我来说听起来像是工作目录与类路径的问题。 java进程运行的工作目录是什么?鉴于 wd,“./classes”和“./lib/javacsv.jar”是有效路径吗?
  • 是的,它们是有效的,我使用相同的目录来运行脚本和运行“直接方式”,直接在终端上键入java - client -clas.....。最后一种形式工作正常。顺便说一句,我找到了问题,或者至少找到了解决方案。

标签: java batch-file


【解决方案1】:

执行变量中的简单引号有点问题,所以不是:

"java -client -classpath './classes:./lib/javacsv.jar' -Xmx7200m Finder.Main "

一定是:

"java -client -classpath ./classes:./lib/javacsv.jar -Xmx7200m Finder.Main "

这可能与 bash 及其工作原理有关,我无法解释为什么会发生这种情况,但该更改解决了问题。

【讨论】:

    【解决方案2】:

    试试sh $exeFinder $1 $2 $3 > $4;

    在我的测试中,我无法直接在变量中执行命令,但我可以将它传递给 sh。

    【讨论】:

    • 这对我不起作用,请注意 $exeFinder 是一个以 java -client..... 开头的变量,所以它就像在控制台中输入 sh java -classpath.... 这对控制台没有意义,在事实上,它返回sh: 0: Can't open java
    • 啊,是的,这是有道理的。我只测试了从变量运行基本命令(cd ..),并认为这是问题,当它对我不起作用时(并且通过sh $variable 运行)。很高兴你找到了答案:-)
    猜你喜欢
    • 2014-08-21
    • 2011-07-14
    • 2011-06-15
    • 1970-01-01
    • 2021-09-27
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多