2016-03-09 3 views
0

У меня есть проблемы с пакетным сценарием, который запускает программу Java, вот некоторые ключевые строки сценария:Проблемы запуск программы 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 

И это работает как шарм! Поэтому я не знаю, что происходит.

Я проверил несколько вопросов, таких как this и this, но я не вижу ничего полезного для меня.

Спасибо за ваше время, ребята

+0

звучит как рабочий каталог vs classpath для меня. В чем работает рабочий каталог java-процесса? что wd - допустимые пути «./classes» и «./lib/javacsv.jar»? – radai

+0

Да, они действительны, я использую тот же каталог для запуска скрипта и для запуска «прямого пути» ввода java-client -clas ..... 'непосредственно на терминал. и последняя форма отлично работает. Кстати, я нашел проблему или, по крайней мере, решение. – onlycparra

ответ

1

Это была небольшая проблема с простых кавычек в переменной выполнения, так что вместо:

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

должно быть:

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

Это, вероятно, что-то связано с Баш и как его работ, я не знаю достаточно, чтобы объяснить, почему это происходит, но это изменение решило проблему.

0

Попробуйте sh $exeFinder $1 $2 $3 > $4;

В моем тестировании, я не смог сразу выполнить команду в переменной, но я мог бы передать его Sh.

+0

это не сработало для меня, обратите внимание, что $ exeFinder - это переменная, которая начинается с 'java -client .....', так что это похоже на тип в консоли 'sh java -classpath ....', который делает нет смысла в консоли, на самом деле он возвращает 'sh: 0: не могу открыть java' – onlycparra

+1

А, да, это имеет смысл. Я только дошел до тестирования базовой команды ('cd ..') из переменной и предположил, что это была проблема, когда она не работала для меня (и выполнялась через' sh $ variable'). Рад, что вы нашли ответ :-) –

Смежные вопросы