Javaでプログラム開発を行う際、jarという拡張子のファイルを見かけたことがある方も多いと思いますが、jarファイルの役割については理解出来ているでしょうか。
本記事では、Javaプログラミング初心者の方向けに、jarファイルの概要から基本的な使い方についての情報をご紹介していきます。
Javaのjarファイルって何?
Javaでのプログラム開発を行っていると必ずと言って良いほど、拡張子が「.jar」となっているファイルを見たことがあるかと思います。
このjarファイルについて、まずは基本情報から確認していきましょう。
jarファイルとは
jarファイルは、「Java Archive」ファイルの略称で、「アーカイブ」つまりJava開発で利用するファイルをまとめて保管しているファイルということになります。
具体的には、jarファイルはコンパイル済みのclassファイルや画像などのファイルを、zip形式に圧縮してまとめたファイルです。
jarファイルはなぜ利用される?
Javaのシステム開発では、いくつものファイルが組み合わさることでシステムとして稼働するように構築していきます。
全てのファイルを1つにまとめると容量が非常に大きくなってしまうことも少なくありません。
ファイルを圧縮して1つのファイルにまとめることで、大幅に容量の節約が可能となります。
さらに、jarファイルはzip形式のファイルと異なり、jarファイルの状態で使用することが出来るメリットがあります。
zip形式のような解凍作業は不要で、利便性が高くなっている点もjarファイルが利用される要因です。
jarファイルの基本的な使い方
jarファイルの作成や展開、実行といった基本的な使い方について確認していきたいと思います。
「jar」コマンドを基本に、それぞれの処理に応じたオプションを付与する形で実行します。
サンプル
今回のサンプルでは「Document」配下に「sample」フォルダを作成し、下記のファイルを格納しています。
sample $ ls 3176675_s.jpg Main.java Sub1.java
Main.javaとSub1.javaの記述内容は下記の通りです。
Main.java
import java.io.*; public class Main { public static void main(String[] args) throws Exception { Sub1 sub1 = new Sub1(); System.out.println(sub1.content); } }
Sub1.java
public class Sub1 { String content = "Sub1クラスからの出力です。"; }
「Main.java」から「Sub1.java」に記載した文字列を呼び出して、ターミナルに出力出来るように記述しています。
classファイルの作成
Javaのソースコードを実行するためには、「.java」拡張子のファイルを「.class」ファイルにコンパイルする必要があります。
まずは用意したサンプルファイルを、下記コマンドでコンパイルしておきましょう。
javac Main.java
コンパイルに成功すると下記のように、同一フォルダにclass拡張子のファイルが出力されていることをご確認頂けます。
sample $ javac Main.java sample $ ls 3176675_s.jpg Main.class Main.java Sub1.class Sub1.java
jarファイルの作成
次にjarファイルを作成するコマンドについてご紹介していきます。
新規でjarファイルを作成する例としては、下記のようなコマンドが挙げられます。
jar -cvfm jarファイル名 マニフェストファイル名 圧縮するファイルを指定
「jar」コマンドはjarファイルを作成する基本となるコマンドで「-」の後ろの「cvfm」がオプションです。
- -c: jarファイルの新規作成
- -v: コンソールに処理内容を表示
- -f: jarのファイル名指定
- -t: jarの中身を一覧表示
- -x: jarファイルの展開
- -u: jarファイルの更新
- -m: マニフェストファイルの指定
- -C: 指定ファイルの取り込み
サンプルでは下記のように記述してみます。
jar -cvfm sample.jar manifest.mf .
今回の場合、現在のディレクトリにあるファイルを全て「sample.jar」というファイル名で圧縮するという意味合いになります。
※出力情報をコンソールに表示するオプションも追加しています。
実行した結果が下記のように表示されます。
sample $ jar -cvfm sample.jar manifest.mf . マニフェストが追加されました Sub1.classを追加中です(入=284)(出=244)(14%収縮されました) manifest.mfを追加中です(入=17)(出=17)(0%収縮されました) .DS_Storeを追加中です(入=6148)(出=275)(95%収縮されました) 3176675_s.jpgを追加中です(入=118125)(出=116590)(1%収縮されました) Main.javaを追加中です(入=179)(出=136)(24%収縮されました) Sub1.javaを追加中です(入=82)(出=84)(-2%収縮されました) Main.classを追加中です(入=514)(出=340)(33%収縮されました)
lsコマンドでディレクトの中身を確認してみると、指定したファイル名でjarファイルが作成されていることをご確認いただけます。
sample $ ls 3176675_s.jpg Main.java Sub1.java sample.jar Main.class Sub1.class manifest.mf
マニフェストファイルはjarを実行する際に必須となるため、マニフェストファイルの作成方法についても合わせて学んでおきましょう。
マニフェストファイルを作成する
マニフェストファイルは、「.mf」拡張子のファイルです。
ファイル内部には下記のように、Mainメソッドを有するクラス名を記述します。
Main-Class: Main
[Main-Class:クラス名]の形式で記述します。
今回の場合、Mainメソッドを有するクラスが「Main.java」であるため、「Main」と指定しています。
文末で必ず改行するようにしてください。
改行しないと正しく実行出来ない場合があるようです。
jarファイルの実行
では作成したjarファイルを実行してみたいと思います。
jarファイルの実行は「java -jar」と記述し、ファイル名を指定することで実行可能です。
sample $ java -jar sample.jar Sub1クラスからの出力です。
ちなみにマニフェストファイルを作成せずにjarファイルを作成して実行した場合、下記のようなエラーが出力されますので確認しておいてください。
sample $ java -jar sample.jar sample.jarにメイン・マニフェスト属性がありません
jarファイルを展開する
jarファイルの中身についてもtオプションを利用して確認しておきましょう。
jar -tf sample.jar
tオプションが展開を意味し、fオプションでファイル名を指定しています。
実行した結果が下記の通りです。
sample $ jar -tf sample.jar META-INF/ META-INF/MANIFEST.MF Sub1.class manifest.mf .DS_Store 3176675_s.jpg Main.java Sub1.java Main.class
今回の場合、カレントディレクトをそのままjarファイルとして圧縮しているため、jpgファイルやjavaファイルなども含まれています。
さいごに: Javaでのプログラミング開発には欠かせないjarファイルの役割を理解しよう
本記事では、Javaでのプログラミング開発には欠かせないjarファイルに関する情報と基本的な使い方についてご紹介してきました。
最近はIDEを利用した開発が大半で、jarファイルを利用してはいるけれども実際の使い方については理解できていないような方も増えています。
今回ご紹介したような基本となる使い方を理解して、曖昧な理解のままjarファイルを利用しなくて良いように学習を進めていきましょう。
今回掲載する内容はMac環境のターミナルで動作確認を行っています。
基本的には同様のコマンドをWindows環境でも利用出来るかと思いますが、必要に応じて適宜読み替えをお願いします。