java - インストール - jar コマンド オプション



破損したjarファイル (6)

私はWindows 7で日食を使用してjarファイルを作成しました。 jarファイルを開こうとすると、jarファイルが無効または破損していると表示されます。 誰も私はなぜjarファイルが無効です示唆できますか?


jar -xvf fileName.jarコマンドを使用して、解凍されたファイルの内容を新しいJavaプロジェクトにEclipseにエクスポートしてください。


jarファイルの最後に余分なバイトがある場合、7-Zipのようなエクスプローラで開くことができますが、破損したものとして扱われます。 私は自動的に1つの余分なLF文字( '\ n'、0x0a)をすべてのjarファイルの最後に追加するオンラインアップロードシステムを使用します。 このようなファイルでは、ファイルを実行するさまざまなソリューションがあります。

  • prayagubdのアプローチを使用して、コマンドプロンプトでメインクラスのクラスパスと名前として.jarを指定します
  • ファイルの末尾にある余分なバイト(16進エディターまたはhead -c -1 myjar.jarようなコマンド)をhead -c -1 myjar.jar 、ダブルクリックするか、通常どおりjava -jar myfile.jarを使用してjarを実行します。
  • 拡張子を.jarから.zipに変更し、ファイルを抽出し、.zipファイルを再作成して、META-INFフォルダーがトップレベルにあることを確認します。
  • .jar拡張子を.zipに変更し、.jar内から未使用のファイルを削除し、拡張子を.jarに戻します。

これらのソリューションはすべて、.zipファイルとMETA-INFファイルの構造が本質的に正しいことが要求されます。 それらは、ジップの最後にある1つの余分なバイトでテストされているだけで、 "破損"しています。

私はhead -c -1 *.jar > tmp.jar 2回適用することで本当に混乱してhead -c -1 *.jar > tmp.jarた。 headはASCIIテキスト==> myjar.jar <==をファイルのhead挿入し、完全に破損させました。


これは、 MANIFEST.MFでもtypo intにすることができます、p.ex. 2つのビルド - 日付:

  Build-Date:: 2017-03-13 16:07:12

これは、ZIP用のJAR拡張を変更し、ZIPコンテンツを抽出し、非常に一般的なMANIFEST.MFファイルの変更などのファイルの変更を行うと、定期的に発生します。何度もEclipseはMANIFESTファイルを生成しませんCLASS-PATHまたはMAIN-CLASSの値を変更したいと考えています。

この問題は、フォルダを元に戻すときに発生します。

有効なRunnable / Executable JARの構造は次のとおりです。

myJAR (Main-Directory)
    |-META-INF (Mandatory)
             |-MANIFEST.MF (Mandatory Main-class: com.MainClass)
    |-com 
         |-MainClass.class (must to implement the main method, mandatory)
    |-properties files (optional)
    |-etc (optional)

JARがこれらのルールに準拠している場合は、ZIPツールを使用して手動でバイラル化してから、拡張子を.jarに戻しても問題ありません

完了したら、コマンドラインで次のコマンドを実行してみてください。

java -jar myJAR.jar 

ZIPツールを使用して解凍し、ファイルを変更して再度圧縮すると、通常、JAR構造がこの構造に変更されます。この構造はファイルシステムの上部に別のディレクトリレベルが追加されているため、

**myJAR (Main-Directory)
    |-myJAR (creates another directory making the file corrupted)**
          |-META-INF (Mandatory)
                   |-MANIFEST.MF (Mandatory Main-class: com.MainClass)
          |-com 
              |-MainClass.class (must to implement the main method, mandatory)
          |-properties files (optional)
          |-etc (optional)

:)


また、実行時に使用されるJavaバージョンが、コンパイル時に使用されるJavaと同等以上のバージョンであることを確認してください






jar