プロが教える店舗&オフィスのセキュリティ対策術

シェルからJavaを起動したい
上記ですけど、Linuxで毎回「java パッケージ名.クラス名」を打つのは面倒なので、
シェルスクリプトのファイルを作って、それを実行するだけで起動できるようにしようと思っています。
が、クラスが見つからないってエラーが出て実行できませんでした。
(「java パッケージ名.クラス名」を実行しているディレクトリにシェルを作ってます)
恐らく環境変数などの設定がシェルの中にいるのではないかと思いますが、
シェルスクリプトとかLinuxの環境には疎い為、どういった記述が必要なのか解りません。
どなたか例を提示して頂けないでしょうか?

ちなみに、一般的なJavaの環境変数や、
プロジェクト特有・jarファイル等の環境変数は設定済みです。


それから、シェルは以下のように記述してます。

#!/bin/sh
java パッケージ名.クラス名


よろしくお願いします。

A 回答 (2件)

状況が明確でないので可能性の一つというだけで役に立たないかもしれないが、


そのシェルスクリプトが存在しているディレクトリをカレントディレクトリにして、

java パッケージ名.クラス名

をコマンドラインで直接打てば動作しており、
また、そのカレントディレクトリでスクリプトを実行した場合にも実行できるが、
他のディレクトリからスクリプトを実行した場合にはクラスが見つからないというエラーになるという状況なら、
クラスパスにそのJavaクラスファイル(のトップ階層)へのパスを追加するか、
スクリプト内でカレントディレクトリを変更するかする必要がある。

例えばディレクトリ構成が、

/a/b/c/シェルスクリプトファイル
/a/b/c/パッケージ名/クラス名.class

になっていて、/a/b/cをカレントディレクトリにして、

java パッケージ名.クラス名

で直接実行したり、シェルスクリプトを起動した場合は実行できて、
他のディレクトリをカレントディレクトリにして実行権限をつけたシェルスクリプトを

/a/b/c/シェルスクリプト

/a/b/c を検索パスに追加しているならシェルスクリプト名だけ

で実行しようとした時にクラスが見つからない場合は、

#!/bin/sh
java -cp /a/b/c パッケージ名.クラス名

のように/a/b/cをクラスパスに指定する。
他にもクラスパスを設定しているならそれも込みでクラスパスを設定する。
スクリプトが置かれているディレクトリがスクリプト実行時のカレントディレクトリに勝手になるわけではない。

もしくは、Javaプログラムの実行中のカレントディレクトリが、
スクリプトが置かれているディレクトリであることを前提にプログラムが作られていたりするのなら(そうでない場合でもいいが)、
javaコマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

また、こちらの少ない情報から、
色々なパターンでの提示も助かりました。

>もしくは、Javaプログラムの実行中のカレントディレクトリが、
>スクリプトが置かれているディレクトリであることを前提にプログラムが作られていたりするのなら(そうでない場合でもいいが)、
>javaコマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。

上記のパターンで動きました!
スクリプトを置いてるディレクトリで動くようにしてるんだから、
スクリプトの内容もjavaコマンドだけでいいって勘違いしてました。
アホでした。

ありがとうございました。

お礼日時:2010/07/21 13:35

パッケージ名の最上位のディレクトリに移動して


java パッケージ名/クラス名
ですよ。
java パッケージ名.クラス名
ではなく、パッケージ名の階層とクラス名の区切りは.でなく/にしてみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
試してみましたが、結果は同じでした。

お礼日時:2010/07/21 13:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!