2012-12-20 55 views
0

我有一個小程序和幾個.sh文件來執行它。我使用Raspberry-pi虛擬箱模擬器來運行它。 (不要問爲什麼......只需要它.. :)) 所以,我的sh文件看起來像:另一個不尋常的java ClassNotFound

export HSQLDB_JAR=../lib/hsqldb-2.2.8.jar 

java -classpath $HSQLDB_JAR org.hsqldb.Server -database.0 ../my-hsqldb/my-hsqldb -dbname.0  my-hsqldb 

我已經將需要的jar文件,Java是正確安裝(多次檢查)誇誇其談,都是一樣的:

[email protected]:/home/snb/my/apps/MyApp/bin$ sh skysql.sh 
: not found2: 
Exception in thread "main" java.lang.NoClassDefFoundError: org/hsqldb/Server 
Caused by: java.lang.ClassNotFoundException: org.hsqldb.Server 

最有趣的事情,當我從SH文件直接從運行的bash腳本 - 它的作品!但在運行sh文件給出了這樣的錯誤:(

任何幫助是非常讚賞。

編輯

以下目錄擁有所有的訪問規則,所以沒有安全問題可能發生。他們都是。訪問

編輯#2

我已經使用所提供的答案和評論,這就是所發生的事情:

  1. 還是同樣的東西:(

  2. 我sh文件:

    #!/bin/bash 
    
    export HSQLDB_JAR="$(pwd)/hsqldb-2.2.8.jar" 
    
    echo $HSQLDB_JAR 
    
    java -classpath $HSQLDB_JAR org.hsqldb.Server -database.0 ../my-hsqldb/my-hsqldb -dbname.0 my-hsqldb 
    

端子輸出爲:

[email protected]:/home/snb/my/apps/MyApp/bin$ sh skysql.sh 
: not found2: 
: not found4: 
/home/snb/my/apps/MyApp/lib/hsqldb-2.2.8.jar 
: not found6: 
Exception in thread "main" java.lang.NoClassDefFoundError: org/hsqldb/Server 
Caused by: java.lang.ClassNotFoundException: org.hsqldb.Server 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: org.hsqldb.Server. Program will exit. 
: not found8: 

所以,你可以看到,。罐子實際上被發現並且它在正確的道路上。

+0

請顯示打印':not found2:'的代碼。我也想看看腳本的第一行。 –

+0

我不知道,爲什麼打印。可能是終端版本的問題,雖然..它只是打印這個所有的時間,當時。 sh文件在我的這個虛擬機上沒有正確執行。 – user

+1

當前工作目錄問題? –

回答

4

這可能是您不顯示的腳本部分中的錯誤。試試這個:

  1. 確保你的腳本的第一行顯示#!/bin/bash

  2. 確保你,你以爲你是在文件夾中是。添加

    if [ ! -e "$HSQLDB_JAR" ]; then echo "Jar not found!" ; exit 1 ; fi 
    

    調用java

  3. 要查看外殼實際執行,使用前-x(作爲參數添加-x到第一行或命令set -x激活)。

如果你需要生成相對於你的腳本的路徑,使用此代碼:

BASE=$(cd $(dirname "$0") > /dev/null && pwd) 
HSQLDB_JAR="$BASE/../lib/hsqldb-2.2.8.jar" 

總是引用包含路徑變量,以確保空白正常工作。

+0

謝謝,我現在就試試。 – user