LoginSignup
5
7

More than 5 years have passed since last update.

コマンドでjarファイルを作成します

Last updated at Posted at 2019-03-16

全部コマンドで、Javaファイルからクラスにコンパイルします。そしてJarファイルを作成します

Jarファイルとは

Jarについては、ウィキで説明は以下です。
Jar(ジャー)またはJava Archive(ジャバ アーカイブ)とは、コンパイルされた複数のJavaバイトコード及びそれが使用する画像などのリソースを一つにまとめZip形式で圧縮されたファイル、及びそれを出力するツールのこと。

準備

ディレクトリ準備
Jarのディレクトリ構造は以下の通りで、必要に応じてディレクトリを作成します。

mkdir jar_compile01
cd jar_compile01
mkdir classes
mkdir -p src/com/demo
mkdir MATE-INFO

classesディレクトリは、コンパイルされたクラスがここに生成されています。
MATE-INFOディレクトリは、拡張機能およびパッケージ関連のデータの定義に使うマニフェストファイルがここに配置されています。

ソースコード準備
src/com/demoの配下にJavaファイルを作ります。

# App.java
package com.demo;
public class App {
    public static void main(String[] arg) {
        System.out.println("Hello World!");
    }
}

マニフェストファイル準備
MATE-INFOの配下にマニフェストファイルを作ります。

# MANIFEST.MF
Main-Class: com.demo.App

クラスコンパイル

Javaをコンパイルしてクラスを作成します。

javac -sourcepath src -d classes src/com/demo/App.java

コンパイルを行うとclassesディレクトリの配下にクラスが作成されます。

■ javacのオプション

                         説明
-classpath ユーザクラスパスを設定し、CLASSPATH 環境変数のユーザクラスパスを上書きします。CLASSPATH と -classpath のどちらも指定されていない場合、ユーザクラスパスは現在のディレクトリになります。詳細は、「クラスパスの設定」を参照してください。
-sourcepath オプションが指定されていない場合は、クラスファイル同様、ソースファイルもユーザクラスパスで検索されます。
-d directory クラスファイルの出力先ディレクトリを設定します。クラスがパッケージの一部である場合、javac は、必要に応じてディレクトリを作成し、パッケージ名を反映したサブディレクトリにクラスファイルを置きます。例えば、-d ./classes と指定し、クラスの名前が com.demo.App である場合、クラスファイルは ./classes/com/demo/App.class になります。
-d が指定されていない場合、javac はソースファイルと同じディレクトリにクラスファイルを置きます。
-d で指定されたディレクトリがユーザクラスパスに自動的に追加されるわけではないことに注意してください。
-encoding ソースファイルのエンコーディング名 (EUCJIS/SJIS など) を指定します。-encoding が指定されていない場合は、プラットフォームのデフォルトコンバータが使われます。
-g 局所変数を含むすべてのデバッグ情報を生成します。デフォルトでは、行番号およびソースファイル情報だけが生成されます。
-g:none デバッグ情報は生成されません。
-g:{keyword list} コンマで区切られたキーワードリストにより指定された、特定の種類のデバッグ情報だけを生成します。 次のキーワードが有効です。
source ソースファイルのデバッグ情報
lines 行番号のデバッグ情報
vars 局所変数のデバッグ情報
-nowarn 警告メッセージを表示しません。
-O 注: -O オプションを指定しても、javac と oldjavac の現在の実装では処理は行われません。
実行時のコードを最適化します。-O オプションを指定すると、コンパイル速度が低下し、作成されるクラスファイルのサイズが増大して、デバッグの困難なプログラムが生成されることがあります。
Java 2 SDK より前は、javac の -g オプションと -O オプションを一緒に使うことができませんでした。Java 2 SDK v1.2 では、これらのオプションを組み合わせることができますが、変数の喪失、コードの移動や喪失などの思わぬ結果になる可能性があります。-O オプションを指定しても、-depend オプションが自動的に有効になったり、-g オプションが自動的に無効になったりすることはなくなりました。
-sourcepath sourcepath クラスまたはインタフェースの定義を検索するソースコードパスを指定します。ユーザクラスパス同様、ソースパスの複数のエントリはセミコロン (;) で区切ります。 ソースパスのエントリには、ディレクトリ、JAR アーカイブ、または ZIP アーカイブを指定できます。パッケージを使っている場合は、ディレクトリまたはアーカイブ内のローカルパス名がパッケージ名を反映していなければなりません。
ソースが見つかった場合、クラスパスで見つかったクラスは、自動再コンパイルの対象になります。
-verbose 冗長出力を指定します。ロードされるクラスおよびコンパイルされるソースファイルごとに情報を出力します。

Jarファイルを作成

jarコマンドでjarファイルを作成します。

jar cvfm app.jar MATE-INFO/MANIFEST.MF -C classes .
# 以下はコマンド実行後の表示
マニフェストが追加されました
com/を追加中です(入=0)(出=0)(0%格納されました)
com/demo/を追加中です(入=0)(出=0)(0%格納されました)
com/demo/App.classを追加中です(入=421)(出=292)(30%収縮されました)

■ jarのオプション

オプション 説明
-c 圧縮ファイルの新規作成
-t 内容の一覧を表示
-x 圧縮ファイルの展開
-u jarファイルの更新
-v コマンドラインに処理内容を表示
-f jarファイル名の指定
-m マニフェストファイルを指定
-i インデックス情報を作成
-o 圧縮を行わない
-M マニフェストファイルを作成しない
-C 指定したファイルの取り込み

Jarファイルを実行

Jarファイル構成を確認します。

jar tf app.jar
# 以下はコマンド実行後の表示
META-INF/
META-INF/MANIFEST.MF
com/
com/demo/
com/demo/App.class

Jarファイルを実行します。

java -jar app.jar
# 以下は実行結果
Hello World!

■ javaのオプション

                              説明
-client       Java HotSpot Client VM を選択します。これはデフォルトの動作です。
-server       Java HotSpot Server VM を選択します。
-classpath
-cp 
クラスファイルを探すディレクトリ、JAR アーカイブ、および ZIP アーカイブのリストを指定します。クラスパスの各エントリはコロン (:) で区切ります。
-classpath または -cp を指定すると、これらのオプションの値によって CLASSPATH環境変数の設定は上書きされます。
-classpath と -cp を使用せず、CLASSPATH も設定されていない場合、ユーザクラスパスは現在のディレクトリ (.) になります。
-Dproperty=value システムプロパティの値を設定します。
-jar JAR ファイルの中にカプセル化されたプログラムを実行します。最初の引数は、スタートアップクラスの名前ではなく、JAR ファイルの名前になります。このオプションが機能するには、JAR ファイルのマニフェストに「Main-Class:classname」という形式の行を指定する必要があります。
classname には、アプリケーションの開始位置として機能する public static void main(String[] args) メソッドを含むクラスを指定します。
JAR ファイルとそのマニフェストについては、JAR ツールのページおよび Java チュートリアルの「Jar Files」を参照してください。このオプションを使用すると、指定された JAR ファイルは、すべてのユーザクラスのソースになり、ほかのユーザクラスパス設定は無視されます。
Solaris 8 では、"java -jar" オプションを付けて実行可能な JAR ファイルは、実行権限セットを保持しています。このため、"java -jar" を使用せずに実行することも可能です。
-verbose
-verbose:class
クラスがロードされるたびにクラスに関する情報を表示します。
-verbose:gc ガベージコレクションイベントが発生するたびに報告します。
-verbose:jni ネイティブメソッドおよびその他の Java Native Interface (JNI) の使用に関する情報を報告します。
-version バージョン情報を表示して終了します。
-showversion バージョン情報を表示して続行します。
-?
-help
使用法を表示して終了します。
5
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7