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の場合は自動的に展開(解凍)し、すぐにアプリケーションを実行できる状態にできる。