JavaのJar(ジャー)拡張子の使い方【初心者向け】

初心者向けにJavaのJar(ジャー)拡張子の使い方について解説しています。これはJava ARchiveの略で、圧縮ファイルのひとつです。jarファイルの作成、展開方法といった基本の操作について学びましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

JavaのJar(ジャー)拡張子の使い方について解説します。

実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Jar(ジャー)拡張子の使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

Jar(ジャー)拡張子とは

JARは「Java ARchive」の略で、Javaプログラムの配布形式のひとつです。

classファイルやリソースファイルなどが、ZIP形式でひとつのファイルにまとめられています。

Javaの開発では、有志が公開・メンテナンスしている様々なオープンソースライブラリを利用する場面が多くあります。それらライブラリはJARファイルで提供されていることがほとんどです。

 

Jar(ジャー)拡張子の使い方

JavaではJARファイルを操作するために「jar」という名前のコマンドが用意されています。もしあなたがOracleのサイトからJDKをダウンロード・インストールしたのであれば、すでに「jar」コマンドが利用可能な状態になっているはずです。

試しに「コマンドプロンプト」を開き、次のコマンドを実行してみましょう。

(Macの場合は「ターミナル」を開いて実行しましょう)

jar --help

次のような、使い方が表示されるでしょう。

(Javaバージョンや環境などにより、実際の出力と異なる場合があります)

使用方法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
jarはクラスおよびリソースのアーカイブを作成し、アーカイブから個々のクラスまたは
リソースを操作または復元できます。

 例:
 # 2つのクラス・ファイルを含むclasses.jarというアーカイブを作成する:
 jar --create --file classes.jar Foo.class Bar.class
 # foo/のすべてのファイルを含む、既存のマニフェストを使用したアーカイブを作成する:
 jar --create --file classes.jar --manifest mymanifest -C foo/ .
 # モジュラjarアーカイブを作成する。モジュール・ディスクリプタはclasses/module-info.classに
 # ある:
 jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0
	 -C foo/ classes resources
 # 既存の非モジュラjarをモジュラjarに更新する:
 jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0
	 -C foo/ module-info.class
 # 複数リリースjarを作成し、一部のファイルをMETA-INF/versions/9ディレクトリに配置する:
 jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes

jarコマンドを短縮または簡略化するには、個別のテキスト・ファイルで引数を指定し、
記号(@)を接頭辞として使用してjarコマンドに渡します。

 例:
 # 追加オプションおよびクラス・ファイルのリストをファイルclasses.listから読込みます
 jar --create --file my.jar @classes.list


 メイン操作モード:

  -c、--create               アーカイブを作成します
  -i,、--generate-index=FILE  指定のjarアーカイブの索引情報を
							 生成します
  -t、--list                 アーカイブの内容を一覧表示します
  -u、--update               既存のjarアーカイブを更新します
  -x、--extract              指定の(またはすべての)ファイルをアーカイブから抽出します
  -d, --describe-module      モジュール・ディスクリプタまたは自動モジュール名を出力します

 どのモードでも有効な操作修飾子:

  -C DIR                     指定のディレクトリに変更し、次のファイルを
							 取り込みます
  -f、--file=FILE            アーカイブ・ファイル名。省略した場合、stdinまたは
							 stdoutのいずれかが操作に基づいて使用されます
	  --release VERSION      次のすべてのファイルをjarのバージョニングされたディレクトリ
							 (つまり、META-INF/versions/VERSION/)に配置します
  -v、--verbose              標準出力に詳細な出力を生成します

 作成または更新モードでのみ有効な操作修飾子:

  -e、--main-class=CLASSNAME モジュラまたは実行可能なjarアーカイブに
							 バンドルされたスタンドアロン・アプリケーションの
							 アプリケーション・エントリ・ポイント
  -m、--manifest=FILE        指定のマニフェスト・ファイルからマニフェスト情報を
							 取り込みます
  -M、--no-manifest          エントリのマニフェスト・ファイルを作成しません
	  --module-version=VERSION    モジュラjarの作成時または非モジュラjarの更新時の
							 モジュール・バージョン
	  --hash-modules=PATTERN モジュラjarの作成時または非モジュラjarの更新時に
							 指定のパターンに一致し、直接または間接的に
							 依存しているモジュールのハッシュを
							 計算および記録します
  -p、--module-path          ハッシュを生成するモジュール依存性
							 の場所

 作成、更新および索引生成モードでのみ有効な操作修飾子:

  -0, --no-compress          格納のみ。ZIP圧縮を使用しません

 その他のオプション:

  -h、--help[:compat]        これ(オプションで互換性)をhelpに指定します
	  --help-extra           追加オプションのヘルプを提供します
	  --version              プログラム・バージョンを出力します

 モジュール・ディスクリプタ'module-info.class'が指定のディレクトリのルートまたは
 jarアーカイブ自体のルートにある場合、アーカイブはモジュラjarです。
 次の操作は、モジュラjarの作成時または既存の非モジュラjarの更新時に
 のみ有効です:  '--module-version'、
 '--hash-modules'および'--module-path'。

 ロング・オプションへの必須またはオプションの引数は、対応するショート・オプション
 に対しても必須またはオプションになります。

 

[PR] Javaで挫折しない学習方法を動画で公開中

Jar(ジャー)拡張子の例、方法など

「jar」コマンドの基本的な使い方である以下2点を紹介します。

  1. jarファイルを作成する
  2. jarファイルを展開する

1. jarファイルを作成する

次のコマンドを実行すると、カレントフォルダに「sample.jar」を作成することができます。

jar cvf sample.jar -C {classファイルなどがあるフォルダ} .

たとえば、/javaproject/target 配下にあるclassファイルやリソースファイルを含めたjarファイルを作成する場合は以下です。

jar cvf sample.jar -C /javaproject/target .

 

2. jarファイルを展開する

次のコマンドを実行すると、sample.jarファイルをカレントフォルダに展開します。

jar xvf sample.jar

試しに次のリンクからダウンロードしたファイルに含まれる「commons-lang3-x.x.x.jar」を展開してみましょう。

Apache Commons Lang

なお、「x」にはバージョンを表す番号が入ります。

バージョン3.8.1の場合は以下のようになります。

jar xvf commons-lang3-3.8.1.jar

 

監修してくれたメンター

青柳哲夫

独立系SIerやベンチャーを経て、現在はフリーランスエンジニアとして活動しています。

PHPやJava・Rubyでの業務系Webアプリケーション開発が得意です。
TechAcademyではJavaコース・ブロックチェーンコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。