• ベストアンサー

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

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

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • jarを起動するとCould not find the main classと表示されます

    なかなかJavaの学習が進みません。助けてください。 Eclipse+VisualEditorでswtを利用したプロジェクトを作成しました。ウィンドウが表示されるだけの単純なものです。 Eclipse上では実行できます。 エクスポートメニューからJarファイル作成を選び、マニフェスト仕様のエントリーポイントのクラスにmainを含むクラスを指定し、jarファイルを作成しましたがダブルクリックで実行すると表題のエラーが出てしまいます。 過去の質問を参考にコマンドラインからもコンパイルして実行してみましたが、うまくいきませんでした。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=985334 アドバイスよろしくお願いします。

  • 作ったjarファイルが起動しません。

    Eclipseでエクスポートしたjarファイルが起動しません。 hello.jarというのを作ったのですが コマンドプロンプトを使って java -jar hello.jar ならば正常に起動します。 マニフェストファイルはちゃんとできているように思います。 他の(自分で作ったものでない)JARファイルは普通に動きます。 コードは package hello.konnnitiha; public class Hello { public static void main(String[] args){ System.out.println("Hello!"); } } マニフェストファイルは Manifest-Version: 1.0 Main-Class: hello.konnnitiha.Hello となっています。 ちなみにコマンドプロンプトで java hello.jar で起動しようとすると Exception in thread "main" java.lang.NoClassDefFoundError: hello/jar Caused by: java.lang.ClassNotFoundException: hello.jar at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: hello.jar. Program will exit. となります。

  • jarファイル内のクラスからjarファイル名の取得

    こんにちわ!yukimura1024です。 ちょっとわかりにくいタイトルかもですが質問です(^^; ○前提条件 1.コマンドプロンプトで以下のようにjarファイルを実行します。  java -jar xxx.jar xxx1 xxx2 2.xxx.jarのなかはx.class、y.class、z.class、と3つのクラスがあり、   x.classのmainメソッドが最初に呼び出されます。 ○質問 上記条件のとき、x.classのmainメソッド内で「xxx.jar」という文字列を取得したいのですが こんなことは可能でしょうか? なぜこんなことをしたいのかというと以下の理由からです。 1.xxx.jarのほかにyyy.jarというjarファイルも作成し、x.class、y.class、z.classを格納する。 2.yyy.jarも最初にx.classのmainメソッドが呼び出される。 3.x.classのmainメソッド内でxxx.jar、yyy.jarのどちらとして呼び出されたのか知りたい! ※2つのjarファイルに格納するx.class、y.class、z.classはまったく同じものです。 アドバイスいただける方いましたらお願いします。

    • ベストアンサー
    • Java
  • jarファイルの作成

    はじめまして。 さっそく質問させていただきます。 Javaでswingを使用してGUIアプリケーションを作成しました。 .exeファイルのようにダブルクリックで起動できるように、jarファイルを作成したのですが、開こうとしてファイルをダブルクリックすると、「failed to load Main-Class manifest attribute from (C:からjarファイルまでの階層)」というエラーがでて実行することができません。 階層は C:\a\b フォルダ b の中に「c.class」「d.class」「MANIFEST.MF」の3つがあります。 c.classがmainメソッドを持っているのでマニフェストファイルには、「Main-Class: c」と書き込み、コマンドプロンプトから「jar cvfm c.jar MANIFEST.MF *.class」と入力、jarファイルが作成されたのですが、ダブルクリックすると上記のエラーがでてしまいます。 どのようにすればエラーなく実行することができるでしょうか? 開発環境は、Windows XP SP3, jdk1.6.0_16, 統合開発環境は使用していません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Jarファイルの作成

    今Swingを使ってシンプルなテキストエディタを作成したのですが、それをjarファイルの作成をしているのですがエラーになるのでアドバイスをお願いします。 現在行っていることは MyEditor.javaを作成しコンパイル実行しました MyEditor..classを作成 マニフェストファイルの作成 ファイル名に test.mfにしています。 ファイルには Main-Class: MyEditor だけを記述しています。 コマンドプロンブスに jar cvfm MyEditor.jar test.mf *.class で実行したら java.io.FileNotFounException:test.mf*.class(ファイル名、ディレクトリ名、またはボリューム、ラベルの構文が間違っています。)となります。 これはファイル名が存在していないことだと思うのですが別にファイル名とかも間違いはないと思うのですが他に原因はありますか?ディレクトリ階層なども確認していますが間違いありません

    • ベストアンサー
    • Java
  • JAR

     JAVAを覚えたいと、数冊の本を買ってみたのですが まったくダメです。わからないです。あいにく、どの本にもJARについてはまったく書かれていません。  WebであるJAVAプログラムをダウンロードしたのですが、 それにJARがあり、JARにまとめる?方法まではわかったのですが、HTMLにAppletタグで表示しようとすると表示されません。  ダウンロードしたものはまったく問題がないのですが、 ある本のプログラムclassをまとめてJARにすると、HTMLでは動きません。classのままだと問題ありません。  マニフェストには Main-Class: だけは指定しています。  どうすれば、Web表示されるでしょうか?

  • Eclipseを用いたJARファイル作成について

    Eclipseを用いてjavaのプログラムをしているのですが アプレットのプログラム"のみ"がJARファイルにエクスポートできずに困っております。 [プロジェクト]を右クリック→[エクスポート]→[JARファイル]に設定するところまでは良いのですが 「JARマニフェスト仕様」というページの、「アプリケーションのエントリー・ポイントのクラスを指定」という項目で、メインクラスを参照しても アプレットのプログラムのクラス"のみ"が表示されていないのでエクスポートできません。コンソールのプログラムのクラスは表示されているので おそらく、アプレットにはmainメソッドを用いていないので表示されないのだと思うのですが・・・。 mainメソッドがないプログラムの場合はどうすれば良いのでしょうか・・・? 自分なりに、↓など調べてみたのですがどこがいけないのかわかりません。 http://mailsrv.nara-edu.ac.jp/~asait/java/applet/applet.htm http://sunjava.seesaa.net/article/57546363.html どこをどうすればこの場合、EclipseでJARファイルが作成できるのか、詳しく教えていただければ助かります。 一応、アプレットは↓の簡単なプログラムを試してみました。実行は出来ます。 import java.applet.Applet; import java.awt.Graphics; public class Sample extends Applet { public void paint(Graphics g) { g.drawString("こんにちは",10,10); } }

  • Jarファイルのマニフェストについて

    マニフェスト内でMain-Classを指定してJarファイルを作成した場合、EXEに近い仕組み(Jarファイルをダブルクリックでプログラムが実行可能)が実現しますが、この際、マニフェスト内でMain-Classに渡すArgmentsやJavawに適用するオプション(-Dなど・・)を指定することは可能なのでしょうか? また可能な場合、どのように指定すればよいのでしょうか?

    • ベストアンサー
    • Java
  • JARファイル・JARコマンドに関して

    JARファイル・JARコマンドに関しての質問です。 同じクラスファイルを使用して、2つのJARファイルを作成しました。 しかし、バイナリツールでファイルを比較したところ、バイナリデータの一致が取れませんでした。 下記に、例と質問を記載します。 ご存知の方がおりましたら、ご教授よろしくお願いします。 例: 1.jar cf C:\java\test\HelloWorld1.jar C:\java\test\HelloWorld.class (クラスファイルをHelloWorld1.jarというJARファイルを作成します。) 2.jar cf C:\java\test\HelloWorld2.jar C:\java\test\HelloWorld.class (クラスファイルをHelloWorld2.jarというJARファイルを作成します。) ※HelloWorld.classはhelloと表示されるだけの簡単プログラムです。 1で作成されたJARファイルと、2で作成されたJARファイルをバイナリで比較したところ一致しませんでした。 ■質問 1.JARコマンドはJARファイルを作成する際に何をしているのでしょうか? 2.同じクラスファイルでJARファイルを作成しているのに、バイナリデータに差がでるのはなぜでしょうか? JARファイル作成時に作成時間等をファイルに保持しているのでしょうか? (作成時間が違うため、JARファイルで差がでるのでは、と推測しています・・・・) いろいろ調べてみたのですが、良い情報が見つかりませんでした。 参考URLだけでも結構です。 ご存知の方がいましたら、ご教授よろしくお願いします。m(_ _)m

    • ベストアンサー
    • Java
  • jarダブルクリックで実行できません

    自作のjarファイルだけがダブルクリックで実行できません。長い時間はまっております。お助けください。 javaアプリを配布するためにexeを作ろうと、まずjarファイルを作ってみました。 どんな状況かと申しますと ・他の方が作られたjarファイルはダブルクリックで実行可能です。 ・自作のjarファイルはダブルクリックで実行できません。 「could not find the main class: ○○ Program will exit」 ・自作のjarファイルはコマンドプロンプトの 「java -jar ○○.jar」で実行されます。 そこでお聞きしたいのが下記URLのゲームに関してです。 http://www.ipl.co.jp/item/JavaShootingGame.html 問題点を探るために、まず公開されているソースをコンパイルし、jarを生成しました。 マニフェストファイルには「Main-Class: Game」を改行付きで加え自作しました。 上記の自作jarのようにダブルクリックで実行できず、 コマンドで実行できます。 次に、公開されているjarを「xvf」コマンドで解凍するとdatファイルと 色々書かれたMANIFEST、 classファイルがでてきました。 ためしに、datを削除し、MANIFESTを自作のものに上書きしました。 これで上記と同条件のはずですが、これでつくったjarファイルは なんとダブルクリックで実行できます。 Classファイルを逆コンパイルしてソースを比べる。 Eclipseで生成する。 マニフェストにClass-Pathをあらゆるところに通してみる。 以上失敗しました。 この2週間こればかりで、正直気がめいりそうです。 対処法も尽きてしまいました。 どうかお助けください。

    • ベストアンサー
    • Java

専門家に質問してみよう