本文では初学者用(自分用)に、JARファイルの作成から使用までをまとめていきたいと思います。
JARファイルは複数のJavaのクラスやパッケージを一つのファイルにまとめたものです。
これを作成するには、jar
コマンドを用いるのが良いです。jar
コマンドはJDKをPCにインストールしていれば使用できます。
##1. 今回の開発環境
以下の条件で、jarファイルを作成していきます。
・マシン: MacBook Air 2017
・OS: macOS High Sierra(10.13.3)
・Javaバージョン: 9.0.4
また本来JARファイルは複数のJavaのクラスやパッケージを一つのファイルにまとめる際に便利なものなのですが、今回は簡単の為に、パッケージもクラスも一つのみを取り扱います。
##2. JARファイルにまとめるJavaクラスの作成
まず今回の例に使用するTest.java
を~/Documents/test/
の中に作成します。
test/
は自身で作成しました。
以下は作成したクラスの内容です。
Test.java
package test;
public class Test {
public static void main(String args[]){
System.out.println("Hello World!");
}
}
JARファイルは.java
ファイルではなく.class
ファイルを使用するので、javac
コマンドでコンパイルする必要があります。
test username$ javac Test.java
今回はパッケージ指定しているので、このプログラムをjava
コマンドで実行して結果を確認する為には、test/
ディレクトリではなくDocuments/
ディレクトリで以下のコマンドを実行する必要があります。
Documents username$ java test.Test
Hello World!
これで~/Documents/test/
のなかに、Test
クラスが作成されました。
##3. JARファイルを作成
続いてjar
コマンドでJARファイルを作成します。
jar
コマンドについてはこちらのサイトにオプションなども含めて詳しく書いてあります。
では早速以下のjar
コマンドでJARファイルを作成しましょう。
Documnets username$ jar cvf Test.jar test/
オプションの内訳としては
・c: JARファイルを新規作成する
・v:詳細な情報を画面に出力する
・f:JARファイル名を指定する
です。
つまり
Documnets username$ jar cvf [新規作成するJARファイルの名前] [JARファイルに含めたいJava
プログラムが入っているディレクトリ]
というふうになっています。
このコマンドを実行した後以下のコマンドを実行するとこのような感じの結果が表示されるはずです。
Documents username$ jar tvf Test.jar
0 Wed Jan 31 16:20:16 JST 2018 META-INF/
88 Wed Jan 31 16:22:12 JST 2018 META-INF/MANIFEST.MF
0 Wed Jan 31 15:06:50 JST 2018 test/
419 Wed Jan 31 16:06:06 JST 2018 test/Test.class
122 Wed Jan 31 15:06:50 JST 2018 test/Test.java
これでJARファイルは作成されました。
##4. JARファイルにメイン・マニフェスト属性を追加
早速JARファイルをjava -jar
コマンドを用いて実行してみましょう。
そうすると
Documents username$ java -jar Test.jar
Test.jarにメイン・マニフェスト属性がありません
というような結果が出力されるはずです。
これは、java -jar
で実行された時に呼び出されるMainメソッドは、どのクラスのMainメソッドなのかを設定していないために起こります。
これが起こらないようにMANIFEST.MF
にメイン・マニフェスト属性を追加してあげる必要があります。
追加の方法としては、.mani
というマニフェストファイルを、JARファイルが存在するディレクトリに作成したあと、そのファイルの中に以下のような内容を記述します。
Main-Class: test.Test
内訳としては、Test.class
が所属しているパッケージの後に、呼びだしたいMainメソッドを保有しているクラス名を記述します。
今回はTest.java
にpackage test;
と書いたのでtest
がTest.class
が所属しているパッケージです。
このようにしてマニフェストファイルを作成した後、以下のコマンドを実行します
Documents username$ jar uvfm Test.jar Test.mani
これでMANIFEST.MF
の中にメイン・マニフェスト属性が追加されました。
MANIFEST.MF
の内容を確認してみると以下のようになっていると思います。
Manifest-Version: 1.0
Created-By: 9.0.4 (Oracle Corporation)
Main-Class: test.Test
##5. JARファイルを実行
ここまでくれば、java -jar
コマンドでJARファイルを実行出来ると思います。
Documents username$ java -jar Test.jar
Hello World!
もしかしたらクラスパスを指定しないと実行できない場合があるかもしれません。
そういう時は、~/.profile
に以下の文を追加します(ファイルがなかったら作成してください)
export CLASS_PATH=/Users/username/Documents/Test.jar
以上がJARファイルの基本です。
自分もまだまだ初学者なので、コメントでの本文に対するご指摘など、是非お願いします!