モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

JAR の基本的な使い方

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2015/03/21
最終更新最終更新
2021/09/07
記事区分記事区分
一般公開

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

応用例

.
└── sample
    └── HelloWorld.java

sample/HelloWorld.java

package sample;

public class HelloWorld {
    public static void print() {
        System.out.println("Hello World!");
    }
}

コンパイルして jar にまとめます。

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

jar を別の java ファイルで利用する

Main.java

import sample.HelloWorld;

class Main {
    public static void main(String args[]) {
        HelloWorld.print();
    }
}

ディレクトリ構成

.
├── Main.java
└── sample.jar

以下のように Main.java のコンパイルおよび実行ができます。

$ javac -classpath ./sample.jar Main.java
$ java -classpath '.;./sample.jar' Main
Hello World!

環境変数 CLASSPATH を利用すればオプション classpath は不要になります。

Likeボタン(off)0
詳細設定を開く/閉じる
アカウント プロフィール画像

Scalaはいいぞ

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

>>さらに詳しくステッカーを贈る
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    ログインする

    関連記事

    • Spring Security フォームログインのサンプルコード
      Spring フレームワークによる Web アプリケーション開発で、ログイン処理を実装する際は Spring Security が便利です。ここでは特に Spring Boot で Web アプリケーションを開発する場合を対象とし、フォームによる ID/Password ログインを行うためのサンプルコードをまとめます。 公式ドキュメント [Spring Security チュートリアル](http...
      えびちゃんえびちゃん11/4/2019に更新
      いいねアイコン画像0
    • Java配列の宣言方法 (C/C++との違い)
      Javaの配列 Javaの配列宣言方法はC/C++と似ているようで若干異なる。 初期化しない場合 C/C++の int array[10]; はJavaでは int array[] = new int[10]; となる。同様にC/C++の int array[3][3]; はJavaでは int array[][] = new int[3][3]; となる。 初期化
      てんとうむしてんとうむし4/13/2018に更新
      いいねアイコン画像0
    • PlantUML による UML 図の描き方
      サムネイル画像-c788fffde5
      PlantUML はテキスト形式で表現されたシーケンス図やクラス図といった UML (Unified Modeling Language) 図の情報から画像を生成するためのツールです。簡単な使い方をまとめます。 インストール方法の選択 Atom や Eclipse のプラグインをインストールしてエディタから利用する方法、JAR をダウンロードして Java コマンドで実行する方法、Redmine ...
      kentakenta12/21/2019に更新
      いいねアイコン画像0
    • Akka HTTP サンプルコード (Scala)
      サムネイル画像-a98142497c
      Akka アクターを用いて実装された汎用 HTTP フレームワークです。Spray の後継です。コアモジュールである akka-http-core は 2016/2/17 に experimental が外れました。akka-http などのいくつかのサブモジュールは 2016/3/1 現在 experimental のままですが、基本的な
      雄太雄太9/7/2021に更新
      いいねアイコン画像0
    • Kestrel の使用例
      Kestrel は Message Queue (MQ) の実装のひとつです。一般に MQ はアプリケーション間やプロセス間、スレッド間で非同期に通信するために用いられます。メッセージの送信側は MQ に書き込めば受信側の応答を待たずに次の処理に非同期に進むことができます。Kestrel はわずか 2500 行程の Scala で実装されており JVM で動作します。MQ 自体はメモリ上に存在する...
      したくんしたくん9/12/2017に更新
      いいねアイコン画像0