JAR(ジャー)またはJava Archive(ジャバ アーカイブ)とは、コンパイルされた複数のJavaバイトコードおよびそれが使用する画像などのリソースを一つにまとめZIP形式で圧縮されたファイル、およびそれを出力するツールのこと。圧縮されたファイルの拡張子には、「.jar」が使われる。
これによりJavaアプリケーション、Javaアプレット、ライブラリの配布が容易になる。アプレットにおいては、複数のJavaクラスファイルを一つにまとめ圧縮することで、全体のファイルの大きさを小さくするだけでなくHTTPコネクションの数を減らせるので、ウェブサーバの負荷が減り、アプレットの起動速度が向上する。
概要
一般的にC言語やC などで書かれたマシンネイティブなプログラムやライブラリ(ネイティブコード)もアーカイブにまとめられて配布されることが多いが、それらは展開してインストールする必要がある。これに対して、Java実行時環境 (Java Runtime Environment: JRE) などに含まれるJavaの標準ツールはJARを直接扱えるため、ユーザが明示的にJARを展開する必要はない。
Javaの標準的なソフトウェア開発キット (Java Development Kit: JDK) には、jarというコマンドラインツールが付属しており、Javaコンパイラjavacで生成したJavaクラスファイルをもとにJARファイルを生成することができる。Javaの標準ライブラリにもjava.util.jarパッケージがあり、JavaプログラムからJARファイルの読み書きができるAPIとして用意されている。
類似するアーカイバとして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で実行したりしてはいけない。なお、Java SE 20まではJARファイル仕様の後方互換性に関してドキュメントに記載があったが、Java SE 21以降は特に書かれていない。
脚注
関連項目
- Java Development Kit
- Java Runtime Environment
- APK (ファイル形式)
![[Java] jarの作成方法 Javaの実行ファイルを作成 JoyPlotドキュメント](https://joyplot.com/documents/wp-content/uploads/2017/08/91a672d4402200bc1939da5f605d38e7-1024x911.png)



![[Java] jarの作成方法 Javaの実行ファイルを作成 JoyPlotドキュメント](https://joyplot.com/documents/wp-content/uploads/2017/08/fcb528696e66e042e5fcc9c0481e8a72.png)