大規模なアプリケーションやクラスライブラリは、
複数のパッケージの集合体となります。
Javaではアプリケーションとクラスライブラリは、
その構造、内部のクラスの取り扱いなど、形式的な部分は全く同じです。
唯一の違いは、アプリケーションの中には最低1個は main()メソッドを含む
クラスが存在し、Javaインタープリタによって直接起動されるという点だけです。
ここで説明するアプリケーションという言葉の中には、
JDKのような汎用のクラスライブラリも含まれると考えてください。
zip形式のファイルは、単独のファイルの中にディレクトリ構造のとその内部の ファイルの情報がそっくり格納されます。 したがって、zip形式のファイル自体を CLASSPATH の対象として指定します。 たとえば JDKのクラスライブラリが典型的な例ですが、 それらは classes.zip という名前のファイルにまとめられています。 仮にこのファイルが /usr/local/java/lib というディレクトリの中にあった とすると、 それに対するクラスパスの設定は次のように行うことになります。
CLASSPATH=/usr/local/java/lib/classes.zip
zip形式のファイルの名前は classes.zip である必要はありません。
むしろ重要なのはパッケージの名称との対応です。
zip形式のファイルの中には
ディレクトリ名としてパッケージの名称が保存されています。
実行する場合には、その名前も正しく指定する必要があります。
別の例を挙げましょう。
ziptool.zip というアーカイブ化されたパッケージがあり、
その中に Zip.class, UnZip.classなどのクラスが含まれているとします。
パッケージ名も ziptoolです。このアーカイブファイルがカレントディレクトリ
に存在したとすると、クラスパスの指定と UnZipの実行は次のようになります。
(実行時の ziptool.zip は単なる引数の指定です。)
CLASSPATH=./ziptool.zip
java ziptool.UnZip ziptool.zip