実行可能なjarファイルとは
本日、Mavenのお勉強中に「実行可能なjarファイル」という単語と遭遇したので、jarファイルについてまとめようと思う。
まず、Jarファイルの実行方法について、順を追ってみていきたい。
①以下のようなテストクラスを作成する。
package test;
public class TestJar{ public static void main(String args[]){
System.out.println("HelloWorld");
}}
②クラスファイルを実行すると、HelloWorldが出力される。
$javac test/TestJar.java
→TestJar.classファイル作成
$java test.TestJar
→HelloWorldが出力される。
③で、同様にjarにして実行してみるとどうなるだろうか。
$jar cf TestJar.jar test/
→TestJar.jarファイル作成
$java -jar TestJar.jar
→jarファイルの実行
「TestJar.jarにメイン・マニフェスト属性がありません」が出力される。
原因としては、jar自体には複数のMainClassを持たせることができるが、どのMainClassを実行するのか定義されていない、ことが原因。
そこで、MANIFEST.MFファイルにメイン・マニフェスト属性を追加することが必要。
④マニュフェストファイルの追加
ファイル名:test.txt(jarと同じ階層)
Main-Class: test.TestJar
※マニュフェストファイルの拡張子はなんでもいいっぽい。
⑤マニュフェストの更新
$jar uvfm TestJar.jar test.txt
test.txtファイルのマニュフェストをJarに更新する。
⑥Jarの実行
$java -jar test.TestJar.jar
→「HelloWorld」が出力される。
なお、フォルダ階層は以下の感じ。
D://
│ test.txt (マニュフェストファイル)
│ TestJar.jar (testフォルダをjarに変換したアーカイブ)
│
└─test
TestJar.class
TestJar.java
このように、jarファイルを単に作るだけでは、jarファイルの実行は不可。
つまり、実行可能なjarファイルとは、マニュフェストを更新して「javaコマンドで実行できる状態にしたjarファイル」のことである。(と思う)
jarファイルって、今までjavaのファイルをまとめただけ、程度の認識だったんだけど、こうしてみると、ちょっと違うんですね。
参考サイト
https://www.qoosky.io/techs/662af713ac
→jarに関するコマンドがある。
https://qiita.com/hiwm0126/items/1b3c008c21463d78337a
→jarに関して丁寧にまとめられている。これ読めば、本ページ以上に理解できる。