JAR (ファイルフォーマット)
JAR(ジャー)またはJava Archive(ジャバ アーカイブ)とは、コンパイルされた複数のJavaバイトコードおよびそれが使用する画像などのリソースを一つにまとめZIP形式で圧縮されたファイル、およびそれを出力するツールのこと。圧縮されたファイルの拡張子には、「.jar」が使われる[2][3]。
拡張子 | .jar |
---|---|
MIMEタイプ | application/java-archive |
UTI | com.sun.java-archive |
開発者 | ネットスケープ、サン・マイクロシステムズ [1] |
種別 | アーカイブ, データ圧縮 |
派生元 | ZIP |
これによりJavaアプリケーション、Javaアプレット、ライブラリの配布が容易になる。アプレットにおいては、複数のJavaクラスファイルを一つにまとめ圧縮することで、全体のファイルの大きさを小さくするだけでなくHTTPコネクションの数を減らせるので、ウェブサーバの負荷が減り、アプレットの起動速度が向上する。
概要
編集一般的にC言語やC++などで書かれたマシンネイティブなプログラムやライブラリ(ネイティブコード)もアーカイブにまとめられて配布されることが多いが、それらは展開してインストールする必要がある。これに対して、Java実行時環境 (Java Runtime Environment: JRE) などに含まれるJavaの標準ツールはJARを直接扱えるため、ユーザが明示的にJARを展開する必要はない。
Javaの標準的なソフトウェア開発キット (Java Development Kit: JDK) には、jar
というコマンドラインツールが付属しており、Javaコンパイラjavac
[4]で生成したJavaクラスファイルをもとにJARファイルを生成することができる。Javaの標準ライブラリにもjava.util.jar
パッケージがあり、JavaプログラムからJARファイルの読み書きができるAPIとして用意されている[5]。
類似するアーカイバとして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で実行したりしてはいけない[6]。なお、Java SE 20まではJARファイル仕様の後方互換性に関してドキュメントに記載があった[7]が、Java SE 21以降は特に書かれていない[8]。
脚注
編集- ^ Java Archive (JAR) Features. Manifest Format
- ^ JDK 6 Java Archive (JAR)-related APIs & Developer Guides
- ^ JDK 6 Java Archive (JAR) 関連 API & 開発者ガイド -- Sun Microsystems
- ^ javac - Java プログラミング言語コンパイラ | JDK 6 ドキュメント
- ^ JARファイルとは - 意味をわかりやすく - IT用語辞典 e-Words
- ^ Interstage Application Serverにおいて、特定のJDKバージョンで作成したjarファイルを、古いJDKバージョンで動作させることはできますか? - Fujitsu Japan
- ^ JAR File Specification - §Backward Compatibility | Oracle Java SE 20
- ^ JAR File Specification | Oracle Java SE 21