JAR (ファイルフォーマット)

JAR（ジャー）またはJava Archive（ジャバ アーカイブ）とは、コンパイルされた複数のJavaバイトコードおよびそれが使用する画像などのリソースを一つにまとめZIP形式で圧縮されたファイル、およびそれを出力するツールのこと。圧縮されたファイルの拡張子には、「.jar」が使われるJDK 6 Java Archive (JAR)-related APIs & Developer GuidesJDK 6 Java Archive (JAR) 関連 API & 開発者ガイド -- Sun Microsystems。

これによりJavaアプリケーション、Javaアプレット、ライブラリの配布が容易になる。アプレットにおいては、複数のJavaクラスファイルを一つにまとめ圧縮することで、全体のファイルの大きさを小さくするだけでなくHTTPコネクションの数を減らせるので、ウェブサーバの負荷が減り、アプレットの起動速度が向上する。

 概要 
一般的にC言語やC++などで書かれたマシンネイティブなプログラムやライブラリ（ネイティブコード）もアーカイブにまとめられて配布されることが多いが、それらは展開してインストールする必要がある。これに対して、Java実行時環境 (Java Runtime Environment: JRE) などに含まれるJavaの標準ツールはJARを直接扱えるため、ユーザが明示的にJARを展開する必要はない。

Javaの標準的なソフトウェア開発キット (Java Development Kit: JDK) には、jarというコマンドラインツールが付属しており、Javaコンパイラjavacjavac - Java プログラミング言語コンパイラ | JDK 6 ドキュメントで生成したJavaクラスファイルをもとにJARファイルを生成することができる。Javaの標準ライブラリにもパッケージがあり、JavaプログラムからJARファイルの読み書きができるAPIとして用意されているJARファイルとは - 意味をわかりやすく - IT用語辞典 e-Words。

類似するアーカイバとしてJSP/Servletなどのウェブアプリケーションを一つのアーカイブにまとめるWAR (Web Application Archive)、EJB (Enterprise JavaBeans) アプリケーションを一つのアーカイブにまとめるEAR (Enterprise Archive) などがある。

JARを含むこれらのアーカイブの実態はZIPそのものであり、ZIPを扱えるツールで同じように扱うことができる。ただし、JAR, WAR, EAR にはMETA-INF/ディレクトリ内にマニフェストと呼ばれるメタ情報が格納されている。このメタ情報はJARを扱うJavaのツールが解釈する。

また、このJARには電子署名をすることも可能である。これにより、JavaアプレットなどのJavaアプリケーションを実行するとき、ユーザがその署名を信用した場合に限り、サンドボックスモデルではできなかったユーザのローカル環境にあるターゲット資源にアクセスすることが可能になる。

JARファイルは後方互換性 (backward compatibility) はあるものの、前方互換性 (forward compatibility) は保証されない。古いバージョンのJDKで生成したJARを、新しいバージョンのJDKで利用したり新しいバージョンのJREで実行したりすることはできるが、逆に新しいJDKで生成したJARを古いJDKで利用したり古いJREで実行したりしてはいけないInterstage Application Serverにおいて、特定のJDKバージョンで作成したjarファイルを、古いJDKバージョンで動作させることはできますか？ - Fujitsu Japan。なお、Java SE 20まではJARファイル仕様の後方互換性に関してドキュメントに記載があったJAR File Specification - §Backward Compatibility | Oracle Java SE 20が、Java SE 21以降は特に書かれていないJAR File Specification | Oracle Java SE 21。

 脚注 

 関連項目 
 Java Development Kit
 Java Runtime Environment
 APK (ファイル形式)

Category:Java
Category:データ圧縮規格