JAR(
Java Archive)は、複数のコンパイル済み
Javaバイトコードや、画像などのリソースを一つにまとめたZIP形式のファイルであり、
Javaアプリケーション、
Javaアプレット、
ライブラリの配布を容易にするツールとしても機能します。
拡張子には「.jar」が用いられます。
JARの主な利点
配布の容易化: 複数のファイルを一つにまとめることで、
Javaアプリケーションや
ライブラリの配布が簡素化されます。
アプレットの効率化: アプレットにおいては、複数のクラスファイルを圧縮することでファイルサイズを縮小し、HTTPコネクション数を削減することで、ウェブサーバーの負荷を軽減し、アプレットの起動速度を向上させます。
JARの仕組み
一般的なネイティブコード(Cや
C++で記述されたプログラム)は、展開とインストールが必要ですが、JARファイルは
Java実行環境(JRE)に含まれるツールで直接扱えるため、ユーザーが明示的に展開する必要はありません。
Javaの標準的な
ソフトウェア開発キット(JDK)には、jarというコマンドラインツールが含まれており、
Javaコンパイラ(javac)で生成されたクラスファイルからJARファイルを生成できます。また、
Javaの標準
ライブラリには、JARファイルの読み書きを行うためのAPI(java.util.jarパッケージ)も提供されています。
JARに類似する
アーカイブ形式として、以下のものがあります。
WAR (Web Application Archive): JSP/ServletなどのWebアプリケーションをまとめる。
EAR (Enterprise Archive): EJB (
Enterprise JavaBeans) アプリケーションをまとめる。
これらの
アーカイブは、実質的にはZIPファイルであり、ZIPファイルを扱えるツールで同様に操作できます。ただし、JAR、WAR、
EARには`META-INF/`
ディレクトリ内に
マニフェストと呼ばれるメタ情報が格納されており、
Javaのツールがこの情報を解釈します。
JARファイルには
電子署名を付与することが可能です。これにより、
Javaアプレットなどのアプリケーション実行時に、ユーザーが署名を信頼した場合に限り、サンドボックスモデルではアクセスできなかったローカル環境のターゲットリソースへのアクセスが可能になります。
互換性
JARファイルには後方互換性がありますが、前方互換性は保証されていません。古いバージョンのJDKで生成されたJARは、新しいJDKやJREで利用できますが、新しいJDKで生成したJARを古い環境で利用することは推奨されません。
Java SE 20までは後方互換性に関する記述がありましたが、
Java SE 21以降では特に言及されていません。
まとめ
JARファイルは、
Javaの配布と実行を効率化するための重要な仕組みです。ZIP形式であるため、他のZIPツールで扱うこともできますが、
マニフェストファイルなどのメタ情報により、
Java環境に特化した機能を提供しています。
関連事項
Java Development Kit (JDK):
Javaアプリケーションを開発するためのツールキット。
Java Runtime Environment (JRE):
Javaアプリケーションを実行するための環境。
*
APK (ファイル形式): Androidアプリケーションのパッケージ形式。