0

小さなプログラムと、それを実行するためのいくつかの .sh ファイルがあります。Raspberry-pi 仮想ボックス エミュレーターを使用して実行します。(理由は聞かないでください...必要なだけです.. :)) したがって、私の .sh ファイルは次のようになります。

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

私は必要な瓶を持っています、Javaは正しくインストールされています(数回チェックされています)、何とか何とか、すべて同じです:

rpi@RaspberryPi:/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

最も興味深いのは、bash から直接 sh ファイルからスクリプトを実行すると、動作することです。しかし、.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
    

端末出力は次のとおりです。

rpi@RaspberryPi:/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: 

ご覧のとおり、.jar が実際に見つかり、正しいパスにあります。

4

1 に答える 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"

空白が正しく機能することを確認するために、パスを含む変数を常に引用符で囲んでください。

于 2012-12-20T08:31:16.233 に答える