2012-03-12 115 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}"