yamadaTarouの日記

日々の生活を書いてます。誰か宛てではなく、自分宛て。もはや自〇行為(オ〇ニー)と同じ

実行可能な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に関して丁寧にまとめられている。これ読めば、本ページ以上に理解できる。