• ベストアンサー

main()を持つクラスが2つ以上あるexecutable jar

main()を持つクラスが2つ以上あるexecutable jar を作成して、 main()を持つクラスを 必要に応じて、起動仕分けることは 可能なのでしょうか? もし、可能であるとすれば マニフェストファイルには どのように記述すればよいのでしょうか? そして、 java -jar コマンドで起動するときにどのようにすればよいのでしょうか? 不可能であれば不可能であるということを 教えてください。 以上

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

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

マニフェストファイルを用意しなくても、クラス名を直接指定する通常のコマンド形式 java -classpath <jarファイル名> <mainがあるクラス名> <コマンドライン引数> で <mainがあるクラス名> を変えれば起動仕分けることは可能です。 マニフェストファイルには Main-Class 属性を一つしか定義できないので、クラス名を指定しない java -jar <jarファイル名> <コマンドライン引数> の形式で起動仕分けることは出来ないと思います。

lawson
質問者

お礼

ありがとう。 java -classpath <jarファイル名> <mainがあるクラス名> <コマンドライン引数> ですが。 java <mainがあるクラス名> -classpath <jarファイル名> <コマンドライン引数> に少し順番を変えてみると。 うまく起動するようでした。 でも、この方法だと、jarファイルとは別に mainを持つクラスファイルが別途必要になってしまう。 一応、 1)mainを持つクラスがjarファイルの中に 含まれているケース 2)mainを持つクラスがjarファイルの中に 含まれていないケース の2つでうまく起動できることを確認しましたが。 やはり、 mainを持つクラスファイルが別途必要になってしまう。 jarファイルだけで、起動することができ、 しかも、jarファイルの中にmainをもつクラスが 複数ある時に、どれをエントリポイントにするかを 起動時に切り分けられるような方法が知りたくて 今回の質問をした次第です。 よろしく、お願い致します。 たぶん、自分もうすうす無理だとおもっているのですが javaコマンドとかのマニアックな引数や あまり、知られていないやりかたとかで、 もしかしたら、知っている方がいるかもしれない のでは?とおもったので、質問しています。 以上

その他の回答 (1)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

> mainを持つクラスファイルが別途必要になってしまう。 そんなはずは無いはず…… 例えば、SampleClass1 と SampleClass2 の二つのクラスがあって、これらが単一のアーカイブ Samples.jar に入っているとき、 > java -classpath Samples.jar SampleClass1 と > java -classpath Samples.jar SampleClass2 とで SampleClass1 の main と SampleClass2 の main とを使い分けられませんか?

lawson
質問者

お礼

ありがとう、ございます。 私の勘違いでした。 できました。 このやりかただと、 jarコマンドでjarファイルを作成する時 にマニフェストファイルを指定する必要も ないみたいです。 複数のバッチコマンドがあって、共通の クラス群を使用していて、 変更したときにjarファイルをひとつだけ 更新するだけでOKな状態にしておきたかったので この質問をしました。 おかげで様でそのような方向性で 動いていけそうです。 ありがとうございました。

関連するQ&A