• ベストアンサー
  • 困ってます

シェルからJavaを起動したい

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

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数16799
  • ありがとう数6

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

  • ベストアンサー
  • 回答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コマンドを実行する前にカレントディレクトリを変更するようにスクリプトを書く。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • シェルからjavaを起動するバッチの圧縮について

    Linuxのシェルの中でjavaのクラスを起動します。その時に、引数(mainメソッドのstring args[])を渡します。 この場合、classファイルをjarにしたら引数を渡すことは可能ですか? classファイルはたくさんあるので、もし、jarファイルが無理なら他に可能な圧縮方法はあるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • 起動シェル内の「. 」について

    アプリケーションサーバーの起動スクリプトに以下のような記述がありました。 この記述は現在のシェルのディレクトリを取得して、環境変数を設定するしシェルを呼び出す記述だと言うのは分かるのですが、最初の「. 」ドットスペースは何をしているのでしょうか? binDir=`dirname $0` . $binDir/setupCmdLine.sh

  • シェルからJava起動

    シェルからJavaを起動するには、 setenvでCLASSPATHを事前に設定し、 java クラス名 では実行できず、 java -classpath クラスパス クラス名 で実行するしかないのでしょうか? 以下では実行できませんでした・・ #!/usr/bin/csh setenv CLASSPATH /export/home/test/jdk13/lib/tools.jar setenv CLASSPATH /export/home/test/batch/java:${CLASSPATH} java B123

その他の回答 (1)

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • シェルによる環境変数の設定方法

    シェルによる環境変数の設定方法に関して質問があります。 ・二つのシェルファイルA.shとB.shがあります。 ・A.shの中でexportを使って環境変数を設定しています。 ・B.shの中でA.shを呼んでいます。 この場合、B.shを実行したコンソールにはA.shで設定した環境変数が設定されません。 B.shを実行したコンソールに別ファイルA.shが設定した環境変数を設定するには どのようにすればよいのでしょうか? 分かる方がいたら教えて下さい。宜しくお願い致します。

  • cronでの文字化け

    RedHatLinux Enterprise Linux 4ESを使用しています。 rootではなユーザでcrontabを使用しており、 シェルファイルを呼び出し定期的に実行しています。 シェルファイルでは環境変数の設定を行い、 Javaのクラスファイルを実行しています。 Javaのクラスファイルで、稼動ログを出力(日本語)しています。 この時の稼動ログの出力ですが、 「Javaファイルの実行」「シェルファイルからの実行」ですと、 文字化けせずに出力されるのですが、 cronからの実行ですと、文字化けしてしまいます。 cronからの実行時に文字化けをしないようにする方法はあるのでしょうか? なお、JavaはShift-JISで作成しています。

  • javaの中で環境変数を設定する。

    javaの記述内で環境変数を設定する事は出来るのでしょうか? osはredhat linuxです。 具体的にはJAVAからCのモジュールをSystem.loadLibraryで 読み込んでいますが、環境変数LD_LIBRARY_PATHから探しに行くと思います。 このCのモジュールのパスを外部ファイルに持たせ、変更できるようにしたいのです。 何か良い方法がありますでしょうか? 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • 環境変数とシェル変数

    UNIXのシェルスクリプトで使用するシェル変数と環境変数とはどういった違いがあるのでしょうか?どのように使い分ける必要があるのでしょうか?また、このような使い方をすると間違いがおこりやすいといった具体的な例など教えていただければ助かります。

  • javaの実行環境

    javaの勉強をしようと思い、以下のhelloworldコードを書いてみました。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World\n"); } } それを、以下のようにlinux環境(ubuntu 10.10)でコンパイル実行しようとしたのですが、 javac HelloWorld.java java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。そこで色々調べて jar cvmf manifest.mf test HelloWorld.class とjarファイルを作成して実行したところ、適切に"Hello World"が表示されました。 (manifest.mfの中身は"Main-Class: HelloWorld"1行だけです。) その後、このjarファイルをwindows環境に持っていって実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。 linux環境で、"echo $CLASSPATH"を実行しても何も表示されず、CLASSPATHはどこにも通っていないようです。 また、windows環境のDOS画面にてSETを実行し、環境変数を表示させてもCLASSPATHはありませんでした。(javaはインストール済みです。) で、質問です。 1)なぜjarにすると実行でき、classファイルのままでは実行出来なかったのでしょうか? 2)windows環境で、CLASSPATHを設定したほうが良いのでしょうか?設定する場合は、prgramfiles\java\binで良いのでしょうか? 以上、長くなり申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • csh (tcsh)での環境変数の長さの制限について教えて下さい。

    Solaris8 (SPARC)上でJavaでいろいろ開発をしているのですが、 シェルの環境変数の長さに制限があるようで困っています。 具体的には、あちこちに散在しているjarファイルを参照する必要 があるので、環境変数 $CLASSPATHが非常に長くなっていて、 現在の設定以上に CLASSPATHを追加しようとすると「Word too long」 というエラーが出て設定できません。 1つの環境変数の長さの制限を変更することは可能でしょうか? もしくはなにか回避策があれば教えて下さい。 使用しているシェルは tcsh です。

  • UNIXのシェル、環境設定について教えてください。

    こんにちは。 UNIXについて詳しく勉強したいとおもっています。 コマンドなど基本的なファイル操作についてはある程度わかるのですが、UNIXの環境設定、環境変数、シェルなどの物につまづいています。 「環境変数って一体なんだよ!」 「シェルのBシェル、Cシェルって・・・」 こんな感じです。 これらについて初心者でもわかるような本、サイトを教えてください。 あと、初心者すぎて恥ずかしい質問なのですが、UNIX系OSにはいろいろな種類があるのは知っているのですが、「UNIX」という名前のOSはあるのでしょうか? また、Teratermを使っているのですが、これって何ていう名前のOSなのでしょうか? 最後に、会社なのでは、SolarisとLinuxどちらが多く使われているのでしょうか? これらの質問に詳しい諸先輩方アドバイスの方をよろしくお願いします。

  • JAVAでJfreeChartを用いたプログラムの実行

    JAVAでJfreeChartを用いたプログラムの実行 質問失礼します. 現在,javaでグラフを表示させるプログラムを作成しています. ○開発環境:eclipse3.5. ○JfreeChart:jfreechart-1.0.13.jar , jcommon-1.0.16.jar 実行に関しての質問なのですが, eclipseからの実行は問題ないのですが, コマンドプロンプトから実行を行うと以下のエラーが出てしまいます. Exception in thread "No.1]" java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset 環境変数の問題と自分なりに考えて設定を変えてみたりしたのですが,いまだに解決できない状態です. (環境変数あたりには詳しくないのでやり方がまずいのかもしれないですが...) わかる方いましたら回答よろしくお願いします.

    • ベストアンサー
    • Java
  • windows8でjarファイルを動かしたい

    Windows7で動かしていたjarファイルをWindows8で動かそうとしたところ、 起動しませんでした。 実行環境は以下です。 ・Windows8 (8.1にはしていません) ・java (Version 7 Update 51) コマンドプロンプトから「java –jar ファイル名.jar」でも起動せず、 環境変数のPATHに「C:\Program Files (x86)\Java\jre7\bin」を追加しましたが、 ダメでした。 何か良い方法を知っている方がいましたら教えて下さい。 どうぞ宜しくお願い致します。

  • javaの環境変数

    http://fedorasrv.com/j2sdk_win.shtml このページに書いてある通りに環境変数を ・マイコンピュータ右クリック⇒詳細設定タブ⇒環境変数⇒システム環境変数で新規⇒「変数名」に"CLASSPATH"、「変数値」に.;%JAVA_HOME%\jre\lib;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jarを入力してOK と書き換えてしまったのですが、コンパイルできません。書き換えてしまったので、元にも戻せないですし。 どうすればいいのかわかりません。 コンパイルできるようになるにはどうすればいいでしょうか?

    • ベストアンサー
    • Java