2012-02-06 4 views
0

これはクラス用です。以前はシェルスクリプトを使ったことはありませんでしたが、私のJavaプログラムを実行するスクリプトを書くことです(コマンドライン引数(少なくとも1つの引数、オプションの2番目の引数)を取るようにすでに設定されています)。私はこのようにそれを実行することができるようになってる:シェルスクリプト:Javaアプリケーションを実行し、スクリプトを介してコマンドライン引数を送信しますか?

./script.sh arg1 arg2 

しかし、私が行うとき、私は次のようなエラー(私のJavaメインクラス名はA1である)を得る:

Exception in thread "main" java.lang.NoClassDefFoundError: A1/class 
    Caused by: java.lang.ClassNotFoundException: A1.class 
    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:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
    Could not find the main class: A1.class. Program will exit. 

をこれは何ですか私のシェルスクリプトは今のように見えます:

#!/bin/sh 

java -Xmx1024m A1.class [email protected] 

助けていただければ幸いです。

あなたがどこ( -cpを使用して)あなたのクラスを探すためにJavaを伝える必要があり

答えて

3

- ディレクトリ内または.jar

いずれかのスクリプトがあるディレクトリを見つけるには(それがから起動された場所ではなく)あなたは$(dirname $0)を使うことができます。

ので、例えば:

#!/bin/bash 

JVM=java 
JVM_OPTS="-Xmx1024m" 

$JVM $JVM_OPTS -cp $(dirname $0)/myapp.jar A1 "[email protected]" 

それはあなたがしたいシェルについて、明示的であることをお勧めします。また、エスケープされたargsに必要な[email protected]の引用符にも注意してください。

+0

ありがとうございました。私がしなければならなかったことは、 ".class"を取り除くことでしたが、ヒントのためにありがとうございました。 – Tim

2

javaを実行するときにclasspathフラグを使用して、仮想マシンにA1.classファイルの場所を伝えます。また

java -classpath /myfolder A1 [email protected] 

のコマンドを実行しているときに、 "の.class" 接尾辞を使用しないでください:

doc

のようなものであるべき参照してください。

+0

ありがとうございます。私がしたのは、 ".class"を取り除くことだけでした。 – Tim

関連する問題