JAR の基本的な使い方
[最終更新] (2019/06/03 00:49:00)
最近の投稿
注目の記事

概要

jar (Java Archive) は tar コマンドのようにファイルをアーカイブする JAVA のコマンドです。簡単に使用方法をまとめます。jar コマンドを利用するためには Oracle のページから JDK をダウンロードおよびインストールして PATH を通しておく必要があります。

基本的な使用方法

sample/HelloWorld.java

package sample;

class HelloWorld {
    public static void main(String args[]) {
        System.out.println("Hello World!");
    }
}

コンパイルしておきます。

$ javac sample/HelloWorld.java

ディレクトリ構成は以下の通りです。

.
└── sample
    ├── HelloWorld.class
    └── HelloWorld.java

実行例

$ java sample.HelloWorld
Hello World!

エントリーポイントのある実行可能な jar を作成

エントリーポイントとなる class ファイルを指定すれば実行可能な jar が生成できます。jar 生成時にマニフェスト情報が記載されたファイルを引数で指定することで情報を取り込めます。ファイル名は何でもよいですが、例えば Manifest.txt としてみます。

.
├── Manifest.txt
└── sample
    ├── HelloWorld.class
    └── HelloWorld.java

Manifest.txt

Main-Class: sample.HelloWorld

以下のコマンドで jar を生成します。

$ jar cvfm sample.jar Manifest.txt sample

オプションの意味は以下の通りです。

-c jar を新規作成する
-v 標準出力に詳細な出力を生成する
-f jar ファイル名を指定する
-m 指定のマニフェスト・ファイルからマニフェスト情報を取り込む

成果物 jar を実行してみます。

$ java -jar sample.jar
Hello World!

jar ファイルの中身を閲覧

「-t アーカイブの内容を一覧表示する」を利用します。

$ jar tf sample.jar
META-INF/
META-INF/MANIFEST.MF
sample/
sample/HelloWorld.class
sample/HelloWorld.java

jar ファイルを展開

「-x ファイルをアーカイブから抽出する」を利用します。

$ jar xvf sample.jar

以下のように展開されます。

.
├── META-INF
│   └── MANIFEST.MF
├── sample
│   ├── HelloWorld.class
│   └── HelloWorld.java
└── sample.jar

先程取り込んだマニフェスト情報が追加されています。

$ cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.7.0_75 (Oracle Corporation)
Main-Class: sample.HelloWorld

エントリーポイントのない実行不可能な jar を作成

マニフェスト情報を取り込むためのファイルを指定しなければよいです。

$ jar cvf sample.jar sample
$ java -jar sample.jar 
sample.jarにメイン・マニフェスト属性がありません
$ jar tf sample.jar 
META-INF/
META-INF/MANIFEST.MF
sample/
sample/HelloWorld.class
sample/HelloWorld.java

そもそもマニフェストファイルを生成しないようにするためには M オプションを利用します。

$ jar cvfM sample.jar sample
$ jar tf sample.jar 
sample/
sample/HelloWorld.class
sample/HelloWorld.java

jar にファイルを追加する

「-u 既存アーカイブを更新する」オプションを利用します。

$ jar uvf sample.jar Append.class
$ jar tf sample.jar
sample/
sample/HelloWorld.class
sample/HelloWorld.java
Append.class

カレントディレクトリを指定する

「-C 指定のディレクトリに変更し、以下のファイルを取り込む」オプションを利用することでカレントディレクトリを変更できます。

.
└── sample
    ├── HelloWorld.class
    └── HelloWorld.java

ルートに HelloWorld.class などが直接配置されています。

$ jar cvf sample.jar -C sample .
$ jar tf sample.jar
META-INF/
META-INF/MANIFEST.MF
HelloWorld.class
HelloWorld.java

比較のために -C を利用しない場合の例を示します。

$ jar cvf sample.jar sample
$ jar tf sample.jar
META-INF/
META-INF/MANIFEST.MF
sample/
sample/HelloWorld.class
sample/HelloWorld.java

応用例

この続きが気になる方は
関連ページ
    概要および事前準備 Apache Maven は Java 用のプロジェクト管理ツールです。テスト、ビルド、javadoc ドキュメント生成などを汎用的な手順で実行できるようになります。Apache Ant の後継です。バージョン 3 について簡単に使用方法をまとめます。事前にこちらからバイナリをダウンロードおよび解凍しておいてください。解凍結果の bin ディレクトリに PATH を通すことで
    概要 Logback は log4j の後継となる Java のロガーです。作者は log4j と同じです。log4j と同様に SLF4J (Simple Logging Facade for Java) というインターフェースを実装しています。JAR ファイルを直接利用する方法と Maven から利用する方法について最も初歩的な例を紹介します。
    概要 sbt は Scala および Java を主な対象としたビルドツールです。Scala Build Tool の略ではありませんが、Simple Build Tool という明示的な記述も公式ドキュメントなどには見当りません。以下 sbt の基本的な使用例をまとめます。使用した sbt のバージョンは 0.13 です。
    概要 Java で Web アプリケーションを開発する際は、一般にビルド結果および必要なリソースファイルなどを WAR (Web application ARchive) 形式のファイルにパッケージングします。JAR ファイルと同様に実行可能 WAR を作ることもできますが、通常は Servlet コンテナとよばれるアプリケーションの上で動かします。Servlet コンテナとしては
    概要 Maven, sbt, cmake, make 等と同様に、ビルドツールとして有名な Gradle の基本的な使い方を、特に Java をビルド対象としてまとめます。2017/05/08 現在、Android における標準のビルドツールです。 参考ドキュメント 環境構築 Installation Creating New Gradle Builds
    概要および事前準備 Scala は JVM 上で動作するバイトコードにコンパイルできる言語です。JAVA よりも柔軟な記述ができます。事前にこちらからダウンロードおよびインストールしておいてください。以下は Maven を利用する前提での記述になっています。以下のようにしてプロジェクトのテンプレートを生成します。