JAR (Java Archive)ファイルとは、JavaのクラスファイルやリソースがZIP形式で圧縮されたファイルです。この記事では、JARファイルとjarコマンドの使い方をご紹介します。
JARとは、Javaのバイトコードやそれらが使用するリソースがZIP形式で圧縮されたファイル、及びそのツールである。ファイルの拡張子には.jar
が使われる。
JARファイルはZIPファイルとほぼ同じであるが、ディレクトリ内にマニフェストと呼ばれるメタ情報が格納されている。 このメタ情報はJARファイルを扱うJavaのツールが解釈する。マニフェストは「META-INF/MANIFEST.MF」というファイル名前である。
Javaプログラムは、クラスファイル(.class)だけでなく、JARファイル(.jar)を実行することもできる。JARファイルを実行するには、javaコマンドに -jar オプションを指定する。
$ java -jar example.jar
JARファイルを実行するためには、JARアーカイブ内のマニフェストファイル(MANIFEST.MF)にMain-Class属性が定義されている必要がある。Main-Class属性が定義されていないJARファイルを実行しようとすると、エラーが発生する。
$ java -jar example.jar
no main manifest attribute, in example.jar
アーカイブを新規作成する。
jar c[vfmOMi] [jar] [manifest] [-C dir] file ...
作成するアーカイブのファイル名を指定するには、jar コマンドに f オプションを指定する。
$ jar cf example.jar Example.class example.properties
jar コマンドに v オプションを指定すると、アーカイブに追加するファイルの詳細情報が出力される。
$ jar cvf example.jar Example.class example.properties
added manifest
adding: Example.class(in = 466) (out= 325)(deflated 30%)
adding: example.properties(in = 4) (out= 6)(deflated -50%)
アーカイブの中身を確認するには、jar コマンドに t オプションを指定して実行する。デフォルトでは、標準入力からアーカイブを取得して中身を確認する。
$ cat example.jar | jar t
META-INF/
META-INF/MANIFEST.MF
Example.class
アーカイブの中身を確認するファイルを指定するには、jar コマンドに f オプションを指定する。
$ jar tf example.jar
META-INF/
META-INF/MANIFEST.MF
Example.class
アーカイブの中身を詳細に確認するには、jar コマンドに v オプションを指定する。
$ jar tvf example.jar
0 Fri Mar 11 10:38:26 JST 2022 META-INF/
55 Fri Mar 11 10:38:26 JST 2022 META-INF/MANIFEST.MF
466 Sat Mar 05 12:21:48 JST 2022 Example.class
指定の(またはすべての)ファイルをアーカイブから解凍(展開)する。
jar x[vfmOMi] [jar] [manifest] [-C dir] file ...
アーカイブを解凍(展開)するには、jar コマンドに x オプションを指定して実行する。デフォルトでは、標準入力からアーカイブを取得して解凍(展開)する。
$ cat example.jar | jar x
解凍(展開)するアーカイブファイルを指定するには、jar コマンドに f オプションを指定する。
$ jar xf example.jar
jar コマンドに v オプションを指定すると、解凍(展開)するファイルの詳細情報が出力される。
$ jar xvf example.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
inflated: Example.class
既存アーカイブを更新する。
jar u[vfmOMi] [jar] [manifest] [-C dir] file ...
example.jarにfoo/bar/baz.jpgが含まれていなければ追加する。example.jarにfoo/bar/baz.jpgが既に含まれていれば、example.jar内のfoo/bar/baz.jpgを置き換える。
$ jar uf example.jar foo/bar/baz.jpg
マニフェストファイル(MANIFEST.MF)の内容には、次に示す情報が格納されている。
Manifest-Version: 1.0
Created-By: 11.0.11 (Ubuntu)
JARに類似する圧縮ファイルとして、ウェブアプリケーションをまとめたWAR (Web Application Archive)やEJBアプリケーションをまとめたEAR (Enterprise Archive)がある。
Oracle (2017) JARファイルの仕様