• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルからJavaを起動したい)

シェルからJavaを起動する方法

このQ&Aのポイント
  • LinuxでシェルからJavaを起動する方法をまとめます。毎回「java パッケージ名.クラス名」と入力するのが面倒な場合、シェルスクリプトを作成して一括実行することができます。
  • しかし、クラスが見つからないというエラーが発生する問題があります。このエラーは環境変数の設定によるものであり、正しく設定する必要があります。
  • この質問では、Javaの環境変数やプロジェクト固有のjarファイルなどはすでに設定済みであることが前提とされています。具体的な解決策を教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.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コマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。

yoshi5570
質問者

お礼

回答ありがとうございます。 また、こちらの少ない情報から、 色々なパターンでの提示も助かりました。 >もしくは、Javaプログラムの実行中のカレントディレクトリが、 >スクリプトが置かれているディレクトリであることを前提にプログラムが作られていたりするのなら(そうでない場合でもいいが)、 >javaコマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。 上記のパターンで動きました! スクリプトを置いてるディレクトリで動くようにしてるんだから、 スクリプトの内容もjavaコマンドだけでいいって勘違いしてました。 アホでした。 ありがとうございました。

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

パッケージ名の最上位のディレクトリに移動して java パッケージ名/クラス名 ですよ。 java パッケージ名.クラス名 ではなく、パッケージ名の階層とクラス名の区切りは.でなく/にしてみてください。

yoshi5570
質問者

お礼

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