jarファイルからファイル名を取得できる方法はあるのか?

このQ&Aのポイント
  • java -jarコマンドで実行されるjarファイル内のクラスから、jarファイル名を取得する方法はあるのかを質問します。
  • 特定のjarファイルの中に複数のクラスがあり、最初に実行されるクラスでjarファイル名を取得したい場合、どうすれば良いのか知りたいです。
  • 複数のjarファイルに同じクラスを格納し、実行時にどのjarファイルが呼び出されたのかを判別する方法についてアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

System.out.println(x.class.getClassLoader().getResource("x.class").toString()); とか書くと、どこのx.classが利用されているか解ります。 URLが取得されるので、そのURLの文字列表現からjarファイルの部分を抜き出すのはそれほど難しくないと思います。 ということで頑張ってください。

yukimura1024
質問者

お礼

回答ありがとうございます。 おお~なるほどそうやるのですか! 明日早速試してみます! ありがとうございました(^^

関連するQ&A

  • JavaのJARファイルがうまく作成できません

    Javaプログラムを作成したのですが、Jarファイルがうまく作成できません。 (Javaプログラムの作成経験はありますが、Jarファイル作成は初めてです) どなたか解決方法をご教授下さい。 4つのソースプログラムがあります。 1) D:\Java\x\y\Random\a.java 2) D:\Java\x\y\Random\b.java 3) D:\Java\x\y\Random\c.java 4) D:\Java\x\y\Random\d.java ■1:Windowsのコマンドプロンプトで、 cd D:\Java javac x\y\Random\*.java と入力して、エラーが発生する事なく、コンパイルできました。 (D:\Java\x\y\Randomフォルダに、a.class, b.class, c.class, d.classファイルができました) ■2:次に(Windowsのコマンドプロンプトで) java x.y.Random.myClass と入力して、期待通り動作しました。 上記1)~4)のjavaソースプログラムは次のようにコーディングしています。 1) a.java package x.y.Random; ・・・ class myClass { public static void main(String args[]) { ・・・ } } 2) b.java package x.y.Random; ・・・ 3) c.java package x.y.Random; ・・・ 4) d.java package x.y.Random; ・・・ ここまではうまく行っており、問題ありません。 ■3: 次のコマンドを実行すると、 jar cvf x.y.Random.jar x\y\Random 何もエラーは発生せず、以下のようなメッセージが10行程度表示され、 ・・・を追加中です。(入=xx)(出=yy)(nn%収縮されました) 「x.y.RandomNum.jar」ファイルが作成されましたが、 このjarファイルをダブルクリックすると、以下のダイアログボックスが表示されます。 ・ダイアログボックスのタイトル Java Virtual Machine Launcher ・エラーメッセージ Failed to load Main-Class manifest attribute from D:\Java\x.y.Random.jar 宜しくお願い致します。

    • ベストアンサー
    • 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
  • Eclipseで、配布可能なJARファイルを作成する方法が解りません。

    Eclipseで、何も無いウインドウを開くというだけのアプリケーションを作ろうとしました。 ライブラリに、 org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar を追加しております。 配布できる形式にしたいため、Jarファイルを作成しました。 プロジェクトにMETA-INFというフォルダを作成し、そこに「Manifest.mf」というファイルを作成し、以下のように記述しました。 Manifest-Version: 1.0 Class-Path: "C:\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar" Main-Class: view.TestWindow ちなみに、「view.TestWindow」というのがmainメソッドのあるクラスの名前です。 JARファイルをエクスポートして、コマンドライン上から以下のように入力しました。 > java -jar TestWindow.jar 結果は、以下のようなエラーが表示されました。 Failed to load Main-Class manifest attribute from TestWindow.jar 多分、「Main-Class」の情報がマニフェストファイルから見つからないと言っているんだと思いますが、Eclipse上からエクスポートする際にはちゃんと場所を指定しています。何が問題なのか解りません。 将来的には、違うマシン上で動作するアプリケーションを作りたいと思っているのですが、最初でいきなり躓いてしまいました。 どなたか教えて頂けないでしょうか。

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

    JARファイル内に格納されたクラスファイル(MainWindow.class)を実行して、同じJARファイル内にバイナリファイル(DataFile.bin)を作成したいのですがどのようにしたらよいでしょうか。  JARファイル内のクラスファイル(MainWindow.class)に記述された、randomAccessFile(string,"rw")命令によって、MainWindow.classが格納されているのと同じJARファイル内にDataFile.binを新規作成したいと思っています。  ちなみに、作成したファイルは、 URL url=null; url=getClass.getResource("DataFile.bin")で呼び出したいと思っています。  インターネット等で検索しているのですが、なかなか見つからなくて困っています。すみませんがどうかよろしくお願いします。

    • ベストアンサー
    • Java
  • 実行可能jarファイルのファイル名取得

    javaの実行可能jarファイルの中で、そのjarファイル名を取得する方法はどうすればよいでしょうか? なお、クラスファイル名は次の方法で取得できています。 public class AAA { public static void main(String[] args) { System.err.println( AAA.class.getResource("AAA.class").toString()); } } 2011年10月16日

    • ベストアンサー
    • Java
  • 作った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が実行できない

    JDKをインストールしていますが、jarファイルをダブルクリックしても Could not find the main class. Program will exit. と表示され実行できません。 コマンドプロンプトでは java -jar Sample.jar で実行できるのですが。 どうすればよいか教えてください。

  • CSVファイルの""内コンマの処理

    以下のようなCSVファイルがあります。 xxx,yyy,"z,zz",XXX,"YY,Y",ZZZ,111,222 これを、 xxx,yyy,zzz,XXX,YYY,ZZZ,111,222 の様にperlで ""内のコンマを取りたいのですが、どうしたらよいでしょうか? xxx,yyy,z zz,XXX,YY Y,ZZZ,111,222 の様に""内コンマを別の文字に置き換えても可です。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 実行可能jarファイルについて!

    実行可能jarファイルについて! java -jar Foo.jar Foo というやり方で、実行可能jarファイルにあるクラスの中から実行するクラスを指定できるという記述があったので、試してみたのですが、うまくいきません。 http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/java_primer/ExecutableJarfile.html どうしても、マニフェストファイルに書かれたクラスが実行されてしまいます。 マニフェストファイルはこちらの内容になります。 Manifest-Version: 1.0 Rsrc-Class-Path: ./ geronimo-jta_1.1_spec-1.0.jar s2-dao-1.0.49.jar co mmons-logging-1.1.jar poi-3.0-FINAL.jar aopalliance-1.0.jar s2-dao-ti ger-1.0.49.jar junit-3.8.2.jar teeda-core-1.0.13-sp7.jar geronimo-ser vlet_2.4_spec-1.0.jar cglib-nodep-2.1_3.jar s2-extension-2.4.40.jar s 2-tiger-2.4.40.jar easymock-2.4.jar teeda-webunit-0.2.2.jar teeda-aja x-1.0.13-sp7.jar teeda-tiger-1.0.13-sp7.jar ojdbc6.jar easymockclasse xtension-2.4.jar commons-lang-2.4.jar javassist-3.4.ga.jar teeda-xmlu nit-0.1.0.jar log4j-1.2.13.jar teeda-extension-1.0.13-sp7.jar ognl-2. 6.9-patch-20090427.jar junit-4.4.jar junit-addons-1.4.jar s2-framewor k-2.4.40.jar h2-1.0.69.jar Class-Path: . Rsrc-Main-Class: jp.co.tsys.sfi.batch.execute.TagOutputExecute Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader jarファイルは、Eclipseの実行可能jarファイルの出力で、エクスポートしました。 よくみると、Main-ClassがEclipseのクラスになっているので、そこが違うのかな、と予想しています。 なぜ、Eclipseのエクスポートを使っているかというと、ライブラリのjarファイル群をjarファイルに取り込むのに便利だと思ったからです。 →これさえできれば、ほかの方法で構いません。 どうかよろしくお願いします!

    • ベストアンサー
    • Java
  • Jarファイルのマニフェストについて

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

    • ベストアンサー
    • Java