Revised: Sep./9th/2002: Since: Jan./1st/2002
Java では一般に、パッケージは JAR (JavaARchive) という圧縮ファイルで用意します。JAR は ZIP フォーマットの圧縮形式であり、パッケージを jar コマンドで圧縮することで作成します。同じく jar コマンドで解凍することもできます。実行環境に含まれるコア・パッケージも JAR ファイルとして配布されており、多くのベンダーから、クラス・ライブラリが JAR ファイルとして配布されています。
JAR ファイル pack.jar を解凍するには、次のコマンドを発行します。
>jar xvf pack.jar
ディレクトリ pack を pack.jar に圧縮するためには、次のコマンドを発行します。
>jar cvf pack.jar pack
JAR ファイル pack.jar に圧縮されているファイルの一覧は、次のコマンドを発行することで取得できます。
>jar tf pack.jar
JAR コマンドの使い方は、フラグを付けない jar コマンドを発行することで閲覧できます。
>jar 使い方: jar {ctxu}[vfm0Mi] [jar-file] [manifest-file] [-C dir] files ... オプション: -c アーカイブを新規作成する -t アーカイブの内容を一覧表示する -x 指定の (またはすべての) ファイルをアーカイブから抽出する -u 既存アーカイブを更新する -v 標準出力に詳細な出力を生成する -f アーカイブファイル名を指定する -m 指定のマニフェストファイルからマニフェスト情報を取り込む -0 格納のみ。ZIP 圧縮を使用しない -M エントリのマニフェストファイルを作成しない -i 指定の jar ファイルのインデックス情報を生成する -C 指定のディレクトリに変更し、以下のファイルを取り込む ファイルがディレクトリの場合は再帰的に処理されます。 マニフェストファイル名とアーカイブファイル名は、フラグ 'm' と 'f' の指定と同じ順番で指定しなければなりません。 例 1: 2 つのクラスファイルをアーカイブ classes.jar に保存する: jar cvf classes.jar Foo.class Bar.class 例 2: 既存のマニフェストファイル 'mymanifest' を使用し、foo/ ディレクトリ の全ファイルを 'classes.jar' にアーカイブする: jar cvfm classes.jar mymanifest -C foo/ .
ここでは、パッケージを作って、JAR ファイルを作成する手順をなぞって見ましょう。
PackageDemo.java
:
import mytools.calc.Circle; class PackageDemo { public static void main(String[] args) { Circle obj = new Circle(); obj.setRadius(args[0]); obj.getResult(); } }
PacakgeDemo.classが存在するディレクトリからの相対パス./mytools/calcに次のクラスを作成します。
Circle.java
package mytools.calc; public class Circle { private double radius; public void setRadius(String str) { radius = Double.parseDouble(str); } public void getResult() { double circum = 0, area = 0; circum = 2.0 * Math.PI * radius; area = Math.PI * radius * radius; System.out.println("円周:" + circum); System.out.println("面積:" + area); } }
コンパイル/実行結果
>javac PackageDemo.java >java PackageDemo 1 円周:6.283185307179586 面積:3.141592653589793 >java PackageDemo 0.5 円周:3.141592653589793 面積:0.7853981633974483
クラスをサーチするパスを設定できます。これはネイティブの環境変数として設定します。
Windows9x系(Windows95/98/98SE/Me)の場合は、autoexec.batの末尾に記述します。例えば、C:\java\packagesをクラスのサーチパスに含めるには、次のエントリーを追加します。反映させるには再起動が必要です。
CLASSPATH .;C:\java\packages;%CLASSPATH%
PATH 変数のエントリーの次の行にでも追加すればよいでしょう。これで、C:\java\packageがサーチパスに追加されました。
WindowsNT系(WindowsNT4/2000/XP)の場合は、「コントロール パネル」の「システム」の「詳細」タブの「環境変数」で設定します。「システム環境変数」の「新規」ボタンで変数名をCLASSPATHにし、変数値に.;C:\java\packages;%CLASSPATH%をセットします。
UNIX/Linux系も通常の環境変数のセット方法と同じです。設計時に、システム全体で使うのか、特定のユーザだけで使うのかを考えて設定します。
試しに、先に作ったC:\java\mytoolsをこのディレクトリに移動してください。C:\java\packages\mytoolsになります。PackageDemoを実行すると、先ほどと同じようにCircleクラスがサーチされ実行されます。
コンパイル/実行結果
>javac packageDemo.java >java PackageDemo 0.5 円周:3.141592653589793 面積:0.7853981633974483
通常は、一つのパッケージには複数のクラスを含めます。classファイルはバイナリ・ファイルであり、一般にサイズが大きくなるので圧縮して用意します。一つの圧縮ファイルとして提供することで、別の環境に移植するのが楽になります。Javaの圧縮ファイルはJAR (Java ARchive)と呼ばれ、圧縮スキームはZIPファイル・フォーマットに準じます。J2SDKにはJARファイル作成用のユーティリティ・ツールであるjarが同梱されています。使い方はUNIX系のtarコマンドと同じで、フラグはv,f,c,t,xなどが使えます。フラグなしでjarだけコマンドとして発行するとヘルプが見られます。
先に作ったmytools.calcパッケージをJARファイルにしてみましょう。mytoolsディレクトリが存在するディレクトリにカレントを移動して次のコマンドを発行します。
>jar cvf myjar.jar mytools マニフェストが追加されました。 mytools/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) mytools/calc/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました) mytools/calc/Circle.java を追加中です。(入 = 387) (出 = 231)(40% 収縮されました) mytools/calc/myjar.jar を追加中です。(入 = 1000) (出 = 808)(19% 収縮されました) mytools/calc/Circle.class を追加中です。(入 = 868) (出 = 542)(37% 収縮されました ) >dir /B mytools myjar.jar
カレント・ディレクトリにmyjar.jarが作られていることが確認できます。これをCLASSPATHにセットすることができます。動作確認のために、mytoolsディレクトリを削除して、環境変数にmyjar.jarの絶対パスをセットしてください。Windows9x系の場合は、次のようになります。
CLASSPATH .;C:\java\packages;C:\java\packages\myjar.jar;%CLASSPATH%
不要になったC:\java\packagesは削除して、PackageDemoを実行して動作確認します。
>java PackageDemo 1 円周:6.283185307179586 面積:3.141592653589793 >java PackageDemo 0.5 円周:3.141592653589793 面積:0.7853981633974483
クラスファイルは削除されても、JARファイルにクラスパスが通っているために、正しく実行されることが確認できました。
サーブレットや JSP の実行環境であるアプリケーションサーバの場合、WAR (Web ARchive) という単位でアプリケーションを配布/配備(適用)します。代表的なアプリケーションサーバ環境が、 Apache Tomcat, Jetty です。アプリケーション・サーバを包括する J2EE コンテナの場合、EAR (Enterprise ARchive) という単位で配布/配備します。代表的な J2EE コンテナ環境が、IBM WebSphere Application Server, BEA WebLogic, JBoss, Apache Geronimo です。
EAR、WAR、JAR は何れも Java 仕様に準拠して定義された ZIP 圧縮ファイルです。JAR の場合は、ここで説明したとおり、そのままクラスパスの宛先として指定できます。EARは、複数の WAR や EJB JAR を含んだ ZIP 圧縮ファイルで、 J2EE コンテナに配布すると、J2EE コンテナが解凍して実行ディレクトリにコピーします。これを配備(デプロイ)と呼んでいます。
WAR には web.xmlが、EAR には application.xml が各々含まれており、配備方法やコンテナへの定義情報が記述されています。これらの XML ファイルは配備記述子 (DD: Deployment Descriptor) と呼ばれ、J2EE 仕様で DTD が定義されたものの他、J2EE コンテナ独自のものも存在します。
何れにせよ、WAR, EAR のディレクトリ構造は、J2EE 仕様で明確に決められています (J2EE 1.4仕様 8.4 Deployment)。*.ear
には、一つの META-INF/application.xml
と、複数の *.war
と *.jar
が含まれています。*.war
には、WEB-INF/web.xml
、WEB-INF/classes/*.class
、WEB-INF/lib/*.jar
、*.jsp
、*.html
などが存在します。
*.ear | +--META-INF | | | +--application.xml | +--*.war | | | +--WEB-INF | | | | | +--web.xml | | | | | +--classes | | | | | | | +--myPackage | | | | | | | | | +--*.class | | | +--resources | | | | | | | | : +--*.properties | | | | | +--lib | | | | | +--*.jar | | | | | +--META-INF | | | | | | | +--MANIFEST.MF | | | | | +--myPackage | | | | | +--*.class | | : | | | +--*.jsp | | | +--*.html, *.png,... | +--ejb*.jar | : |
図:極大雑把なディレクトリ構成 |
Sun Micorosystems: WARファイルの構造 |
Sun Microsystems: EARファイルの構造 |
SEO | [PR] !uO z[y[WJ Cu | ||