Jarコマンド

感想おまちしてます!

classファイルを固めてくれる。
jarを作る時に「じゃぁJarを作ってね」とか言ってしまうと冗談になってしまうので注意。

jar [ options ] [manifest] destination input-file [input-files]

classファイルなどをまとめるために使用する。jarはZIPおよびZLIB圧縮形式のアーカイブなので、解凍ソフトで解凍することが可能。

使ってみよう

「-C /home/test/bin .」で「/home/test/bin以下のファイル」となる。

// classファイルの入ったフォルダをjarに固める
$ jar -cvf /home/test/lib/test.jar -C /home/test/bin .
マニフェストが追加されました。
jp/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
jp/test/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
jp/test/Sample01.class を追加中です。(入 = 537) (出 = 340)(36% 収縮されました)
jp/testtest/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
jp/testtest/Sample02.class を追加中です。(入 = 580) (出 = 369)(36% 収縮されました)
// jarの中身を見たい場合
$ jar -tf test.jar
META-INF/
META-INF/MANIFEST.MF
jp/
jp/test/
jp/test/Sample01.class
jp/testtest/
jp/testtest/Sample02.class
$ jar -tvf test.jar
0 Fri Nov 11 13:56:22 JST 2005 META-INF/
62 Fri Nov 11 13:56:22 JST 2005 META-INF/MANIFEST.MF
0 Fri Nov 11 12:09:16 JST 2005 jp/
0 Fri Nov 11 11:39:38 JST 2005 jp/test/
537 Fri Nov 11 12:09:00 JST 2005 jp/test/Sample01.class
0 Fri Nov 11 12:09:16 JST 2005 jp/testtest/
580 Fri Nov 11 12:09:16 JST 2005 jp/testtest/Sample02.class

シーリングとは

JARファイル作成時にシールを指定することができる(これをシーリングという)。シーリングすることで、同一バージョン内で整合性を保つことができる。
JARファイルのシーリング属性とパッケージのシーリング属性の2つが指定できるがどちらか一方しか指定できない。

パッケージにシーリング

「com.test」というパッケージをシーリングしたとする。すると「com.test.*」のクラスファイルたちは同じJARファイルに入っていないといけない。よって、「com.test.*」のクラスファイルを別のJARファイルに分けて格納することができない。
よって、「com.test」がシーリングされている場合、「com.test.TestClass?」を修正し、パッチの形式でJARファイルをリリースすることができず、パッケージすべてを更新してJARファイルをリリースしなければならない。
仮に別のJARファイルに格納した場合、SecurityException?がスルーされてしまう。

JARファイルにシーリング

そのJARファイルに入っているすべてのクラスたちがシーリングされる。

シーリングする場合

マニフェスト属性Sealedで指定する。

パッケージの場合

Name: javax/servlet/internal/  <<このパッケージ以下のクラスがシーリングされる
Sealed: true                   <<trueかfalseを指定

この属性が指定されていない場合は、パッケージのシール属性は、そのパッケージが含まれる JAR ファイルのシール属性と同じになる。

JARファイルの場合

Sealed: true

JAR ファイルをシールするかどうかは、上と同じマニフェストヘッダ Sealed で指定する。

warファイル

warファイルはWEBアプリケーションに含まれる画像ファイル、JSPファイル、Javaクラスなどをまとめたもの。実際にはZIPファイル。
Windowsの場合、「TOMCAT_HOME\webapps」以下のフォルダ単位でまとめるのが一般的らしい。

cd %CATALINA_HOME%\webapps\kingdom
> jar -cvf kingdom.war *

warで固めたファイルをWEBアプリケーションの実行フォルダに配置するだけで、Tomcatの場合は自動的に展開(解凍)し、すぐにアプリケーションを実行できる状態にできる。