• ベストアンサー

Jarファイルについて。

Jarファイルについて。 Jarで固めらたアプリの実行ログ(アプリスタート時に)に、JarファイルのMANIFEST.MF が持つCreate情報(コンパイルに使用したJavaバージョン)を書き出したいと思っています。 コマンド等で取り出す方法をご存知の方、ご教授お願いできますでしょうか。 MANIFEST.MFファイルの中身 ----------------- Manifest-Version: 1.0 Created-By: 1.6.0_18 (Sun Microsystems Inc.) -----------------

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

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

  • ベストアンサー
  • nknk80
  • ベストアンサー率65% (17/26)
回答No.2

プログラムからは次のようにして取り出せます。 InputStream is=ClassLoader.getSystemResourceAsStream("MANIFEST.MF"); Manifest mf=new Manifest(is); System.out.println(mf.getMainAttributes().getValue("Created-By"));

hh28868
質問者

お礼

完璧な返答ありがとうございました!

その他の回答 (1)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

UNIX系の環境なら $ unzip -p XYZ.jar META-INF/MANIFEST.MF | grep ^Created-By:

hh28868
質問者

お礼

返答ありがとうございます。使わせていただきます!!

関連するQ&A

  • jarファイルをダブルクリックで実行したいのですが

    こんにちは。今、Windows Vistaと、Java SE 6 UPDATE 4でJavaの勉強をしているのですが、以前書籍を読んでjarファイルを作った時は、コマンドラインからしか実行しなかったのですが、どうもダブルクリックでも実行できるような事が各サイトに載っていましたので、あるサイトを参考にHelloWorld.jarというファイルを作ったのですが、コマンドラインからは動作できますが、ダブルクリックしても「このファイルを開けません」というダイアログボックスが出てきたので、「インストールされたプログラムの一覧からプログラムを選択する」でjavaw.exeを選んだりjava.exeを選んだりして実行してみたのですが、コマンドラインが一瞬立ち上がってすぐに消えたり、「Could not find the main class. Program will exit.」というダイアログが出現したりして実行できませんでした。 MANIFEST.MFは、 Manifest-Version: 1.0 Main-Class: HelloWorld と記述してます。 コマンドラインでjarファイルを作った時のコマンドは、 jar cvfm HelloWorld.jar MANIFEST.MF *.class です。 コマンドラインからでは、java -jar HelloWorld.jarで動作しています。 HelloWorld.jar をラカで解凍したら、HelloWorldフォルダ直下に、HelloWorld.classとMainPanel.classとMETA-INFフォルダ、 META-INFフォルダの中にMANIFEST.MFがあり、中身は、 Manifest-Version: 1.0 Created-By: 1.6.0_04 (Sun Microsystems Inc.) Main-Class: HelloWorld  となっていました。 もし悪い所がございましたら、アドバイスの方よろしくお願いいたします。

    • ベストアンサー
    • Java
  • MacOSX10.2でのjavaアプリの実行(Reply from SOCKS server has bad version)

    難問にぶつかり解決策が見つからないのでご教授いただけたらと思います。 javaでアプリを作成しMacOSXでの稼動確認を行っています。 環境は以下です。 コンパイル環境:Win2000 JDK1.4.1_02-b06 実行環境:eMac(MacOSX10.2.6) JRE1.4.1_01-69.1 アプリの概要:サーバマシンとソケット通信を行う。 実際にMacOSX10.2でアプリを起動すると ソケットをnewするところでエラーが出て止まってしまいます。 このアプリはwin2000、MacOSX10.3.2では正しく動作する事が確認できています。 エラー内容:   Reply from SOCKS server has bad version エラーが出る個所:   mySocket = new Socket(ホストネーム, ポート番号);   (mySocketは既に宣言済み) このアプリの作成方法は以下です。 コンパイル:   Eclipse3・Windows2000からjavac・MacOSX10.3.2からjavac   (3通りのコンパイル方法で試しましたが結果は同じです) jarファイルの作成:   jar cvfm app.jar manifest.mf * (パッケージごとアーカイブ化) manifest.mfの内容:   Manifest-Version: 1.0   Created-By: 1.4.1_02b (Sun Microsystems Inc.)   Main-Class: メインの場所 呼び出し方法    app.jarをダブルクリック MacOSXのバージョンがいけないかと思い 10.2.4→10.2.6にアップグレードしたのですが現象は変わりませんでした。 またアップルのサポートで見る限り、 10.2系ではJRE1.4.2はインストールできないようです。 ズバリ解決策や原因でなくてもかまいません。 ヒントになるような事でもけっこうです。よろしくお願いします。

    • ベストアンサー
    • Java
  • classファイルとJARファイルで実行した出力が異なる

    Javaのコマンドラインツールです。 CLASSファイルのままで実行 C:\> java -classpath .;mail.jar;activation.jar Mailx すると正常な出力が得られるプログラムをJARファイルにして C:\> jar xvf activation.jar C:\> jar xvf mail.jar C:\> jar cfm Mailx.jar Mailx.mf *.class com javax C:\> jar tvf Mailx.jar 実行 C:\>java -classpath Mailx.jar Mailx すると、正常な出力が得られなくなり、メールアドレスが出力されるはずが、メモリのアドレスのような値が出力  javax.mail.util.SharedByteArrayInputStream@1bf52a5 されるようになります。 なぜなのでしょうか? <Mailx.mf> Manifest-Version: 1.0 Main-Class: Mailx

  • 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コマンドでマニフェストファイルを更新

    jdk 1.6.0.26のjarコマンドを使って、既存のjarファイルのマニフェストファイルを更新したいのですが、下記のように警告が表示されてしまいます。 (下記例は、既存のtest.jarにマニフェストファイルmanifest.txtを更新する例です) >jar uvmf manifest.txt test.jar 2011/08/15 1:54:26 java.util.jar.Attributes read 警告: Duplicate name in Manifest: Main-Class. Ensure that the manifest does not have duplicate entries, and that blank lines separate individual sections in both your manifest and in the META-INF/MANIFEST.MF entry in the jar file. 2011/08/15 1:54:26 java.util.jar.Attributes read 警告: Duplicate name in Manifest: Class-Path. Ensure that the manifest does not have duplicate entries, and that blank lines separate individual sections in both your manifest and in the META-INF/MANIFEST.MF entry in the jar file. マニフェストが更新されました。 ちなみに、既存のtest.jarのマニフェストファイルの内容は、下記のようになっており、 Main-Class: jp.main.MainClass Class-Path: hello.jar manifest.txtの内容は、下記のようになっています。 Main-Class: jp.main.MainClass Class-Path: hello2.jar つまり、Class-Pathの所を別なjarファイルに書き換えたいわけです。 上記のjarコマンドで、警告はでますが、実行するとhello2.jarが動作しているようなので、大丈夫なのですが、警告が出るということは、やり方が悪いのでしょうか?

    • ベストアンサー
    • 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
  • 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
  • windows8でjarファイルを動かしたい

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

  • 作った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コマンドに関して

    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

専門家に質問してみよう