• 締切済み

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

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • liwet
  • ベストアンサー率72% (18/25)
回答No.1

mail.jar の中には、class ファイル以外に、META-INF の下にも設定ファイルのようなものが入っています。 activation.jar も同じです。 Mailx.jar を作成するときに、そのファイルが入らなかったため、設定がおかしくなったのかも知れません。 じゃぁ、META-INFの下を追加すればいいかというと、mail.jarとactivation.jarで、META-INFの中に同一名のファイルがあります。 なので、そのままひとつにまとめることは出来ないと思います。

関連するQ&A

  • 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
  • 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
  • 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
  • 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ファイルをダブルクリックで実行したいのですが

    こんにちは。今、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
  • jarファイルをCLASSPATHを設定せずに実行

    eclipseでantを用いてjavaの開発を行っています JDBCを使用するために外部のjarファイルを利用しているのですがその外部のjarファイルを含めた形で一つのjarファイルに固めることは出来るのでしょうか? 具体的には >export CLASSPATH="/workspace/project/lib/bar.jar" >java -jar hoge.jar ではなく >java -jar hoge.jar だけで実行できるようにしたいと考えています

    • ベストアンサー
    • 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ファイルについて!

    実行可能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が実行できない

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

  • Jarファイルについて

    Jarファイルについて質問があります。 XalanやXercesなどは、Jarファイルとして提供されていて、 classpathに通してJavaプログラム内で使用するわけですが、 実行の際Jarファイルは一度解凍されてから、JVM内に読み込まれるのでしょうか? JarファイルはZipと同様の圧縮形式だと認識してますので、 解凍してから実行されるのだろうと思ってます。 どなたかご教授願いますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう