2012-03-12 5 views
1

Я написал простой Linux Script этот путьНастройка пути к классам внутри Linux Script

export JAVA_HOME=/usr/local/jdk1.6.0_20 
export PATH=/usr/local/jdk1.6.0_20/bin 
LIB_DIR=/home/praveen/lib 

export CLASSPATH=.:$LIB_DIR/commons-logging-1.0.4.jar:$LIB_DIR/log4j-1.2.8.jar 

java -cp $CLASSPATH com.test.Sample 

========================== ================================================== ===

Приведенный выше сценарий работает нормально.

Но когда я попробовал в первый раз с этим, он дает ошибку

export JAVA_HOME=/usr/local/jdk1.6.0_20 
export PATH=/usr/local/jdk1.6.0_20/bin 
export CLASSPATH = /home/praveen/lib/commons-logging-1.0.4.jar: /home/praveen/lib/log4j-1.2.8.jar 

    java -cp $CLASSPATH com.test.Sample 

Как вы можете заметить, единственное различие между этими двумя сценариями заключается в том, в приведенном ниже сценарии на к классу путь, я не включаю текущий путь к каталогу (.)

Пожалуйста, дайте мне знать, почему это не будет работать так?

+0

Какая ошибка у вас возникает? И где вы запускаете этот скрипт, есть ли какие-либо файлы классов или JAR, присутствующие в том же каталоге, откуда вы запускаете скрипт? –

+0

Связанный: [Использование bash, как вы делаете путь к классам из всех файлов в каталоге] (http://stackoverflow.com/q/4729863/320399) – blong

ответ

4

Вы должны использовать:

export CLASSPATH=/home/praveen/lib/commons-logging-1.0.4.jar:/home/praveen/lib/log4j-1.2.8.jar 

вместо:

export CLASSPATH = /home/praveen/lib/commons-logging-1.0.4.jar: /home/praveen/lib/log4j-1.2.8.jar 

Вы не можете поместить пробелы между именем переменной и знак равенства в скриптах оболочки.

-1

Попробуйте это ..:

#!/bin/bash 
export JAVA_HOME=... 

cp=$(find lib -name "*.jar" -exec printf :{} ';') 
if [[ -n "$CLASSPATH" ]]; then 
    cp="$cp;CLASSPATH" 
fi 

"$JAVA_HOME/bin/java" -classpath "$cp" ... 
+0

Пожалуйста, объясните, что вы здесь делаете. – user1511417

+0

код 'cp = $ (find lib -name" * .jar "-exec printf: {} ';') если [[-n" $ CLASSPATH "]]; затем cp = "$ cp; CLASSPATH" fi' найти весь файл jar в папке lib и добавить к переменной cp, а затем использовать переменную cp в java -classpath – tarn

0

Вы не должны ставить пробелы в когда вы устанавливаете переменную, даже пространства вокруг '=', оно должно быть:

export CLASSPATH=/home/praveen/lib/commons-logging-1.0.4.jar:/home/praveen/lib/log4j-1.2.8.jar 

Если у вас есть пробелы в одном из элементов, использующих одиночные или двойные котировки, например:

MY_VAR1=' variable with spaces' 
MY_VAR2=variable_without_spaces 
export MY_VAR3="${MY_VAR1}${MY_VAR2}" 
Смежные вопросы