2012-03-12 114 views
1

我寫了一個簡單的Linux腳本這樣設置CLASSPATH

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文件存在於你運行腳本的同一目錄中? – 2012-03-12 09:44:42

+0

相關:[使用bash,你如何製作一個目錄中的所有文件的類路徑](http://stackoverflow.com/q/4729863/320399) – blong 2014-07-30 13:18:18

回答

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 

你不能把空間的變量名之間的平等在shell腳本登錄。

-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 2015-11-04 12:49:49

+0

代碼塊 'cp = $(find lib -name「* .jar」-exec printf:{}';') if [[-n「$ CLASSPATH」]];然後 cp =「$ cp; CLASSPATH」 fi' 查找lib文件夾中的所有jar文件並追加到變量cp,然後在java -classpath中使用變量cp – tarn 2015-11-17 03:32:32

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}"