【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コマンドについてでした~。