【Java】Jarコマンドについて

JARとは

Javaで開発されたプログラムは、複数のクラスファイルの集合体から構成されています。PJでは、別の開発者にプログラムを渡す、ないしプログラムを本番環境へリリースする際のファイルの受け漏れなどのリスクを回避するためにも、ファイル一式を1つにまとめるアーカイブ形式としてJAR(Java Archive)が用意されています。

jarコマンド

jarコマンドを使用することにより複数のクラスファイルやプロパティファイルをまとめて一つのJARにしたり、逆にJARファイルの中身をクラスファイルに展開したりすることができます。

/アーカイブの作成
/jar -cvf JARファイル名 ファイルorフォルダ
>jar -cvf Sample.jar *.java
 OR
>jar -cvf Sample.jar TestA.class TestB.class 
 マニフェストが追加されました
 testA.javaを追加中です(入=44)(出=40)(9%収縮されました)
 TestB.javaを追加中です(入=44)(出=42)(4%収縮されました)

/アーカイブの展開
/jar -xvf JARファイル名
>jar -vxf Sample.jar
 META-INF/が作成されました
 META-INF/MANIFEST.MFが展開されました
 testA.javaが展開されました
 TestB.javaが展開されました

/アーカイブの確認
/jar -tvf JARファイル名
>jar -tvf Sample.jar
    0 Mon Jul 20 01:37:02 JST 2020 META-INF/
   60 Mon Jul 20 01:37:02 JST 2020 META-INF/MANIFEST.MF
   44 Mon Jul 20 01:34:02 JST 2020 testA.java
   44 Mon Jul 20 01:34:12 JST 2020 TestB.java


JARファイルのメリット

JARファイルを一度作成すると、そのJARをクラスパスに追加することで、指定したクラスのみ実行することが可能です。

/JARファイル内のTestAクラスを実行する
jar -cp Sample.jar TestA

マニフェストファイル

JAR形式はZIP形式とほぼ同じもので、拡張子をzipに書き換えることで展開ソフトで解凍することもできます。

JARファイルには、アーカイブ内に含まれるファイルに関する追加情報を記述したマニフェストファイル(テキスト形式)を含めることが一般的。アーカイブ中の「META-INF/MANIFEST.MF」というファイルが該当の設定ファイルで、JARが作成されると同時に自動生成される。「~:~」というエントリを記述すること。(※Manifest-Version: 1.0は必ず記載する。)

>cat MANIFEST.MF
 Manifest-Version: 1.0
 Created-By: 11.0.4 (AdoptOpenJDK)

自身で用意したマニフェストファイルをJARに含める方法

/jar -cvfm JARファイル名 マニフェストファイル名 ファイルorディレクトリ名
>jar -cvfm manifest.txt Sample.jar TestA.class TestB.class 

エントリの種類

Main-Classエントリ

今回は、Main-Classエントリについてのみ紹介します。

まず、マニフェストファイルにMain-Classエントリを追加し、完全限定クラス名(FQCN)を記述することで、JARにおけるメインクラスを指定することができるようになります。

Manifest-Version: 1.0
Created-By: 11.0.4 (AdoptOpenJDK)
Main-Class: jp.co.nuko.Sample.test.Main

メインクラスを指定することで次の2つが可能となる。

①Javaコマンドでメインクラスの指定が不要となる。

→指定されたJARファイルのマニフェストファイルをチェックし、どのクラスをメインクラスとして起動すべきかを判断する。起動すべきクラスのFQCNを知らなくても実行ができる。

>java -jar JARファイル名
>java -cp JARファイル名 JARファイルに含まれるメインクラスのFQCN

②JARファイルをダブルクリックでプログラム起動できる。


以上、JARとjarコマンドについてでした~。

この記事が気に入ったらサポートをしてみませんか?