[Java]Eclipseで実行可能JARファイルでエクスポートした時のディレクトリ構成の違い
エクスポートするプロジェクトのディレクトリ構成
SpringSample src spring sample SpringSample.java conf spring-conf.xml lib spring.jar commons-logging.jar
1.生成されるJARに必須ライブラリーを抽出
SpringSample.jar META-INF MANIFEST.MF LICENSE(commons-loggingのMETA-INFの中身) spring.tld(spring.jarのMETA-INFの中身) org springframework ...(spring.jarの中身が展開されている) spring sample SpringSample.java spring-conf.xml
MANIFEST.MFの中身
Manifest-Version: 1.0 Class-Path: . Main-Class: spring.sample.SpringSample
2.生成されるJARに必須ライブラリーをパッケージ
SpringSample.jar META-INF MANIFEST.MF org eclipse/jdt/internal/jarinjarloader JarRsrcLoader.class ... spring sample SpringSample.java commons-logging.jar spring.jar spring-conf.xml
MANIFEST.MFの中身
Manifest-Version: 1.0 Rsrc-Class-Path: ./ spring.jar commons-logging.jar Class-Path: . Rsrc-Main-Class: spring.sample.SpringSample Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
3.生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー
SpringSample.jar META-INF MANIFEST.MF spring sample SpringSample.java spring-conf.xml SpringSample_lib commons-logging.jar spring.jar
MANIFEST.MFの中身
Manifest-Version: 1.0 Class-Path: . springSample_lib/spring.jar springSample_lib/commons-logging.jar Main-Class: spring.sample.SpringSample
構成の違いのまとめ
・生成されるJARに必須ライブラリーを抽出
依存するjarの中身を全て展開する。そのため、クラスパスはカレントのみ
・生成されるJARに必須ライブラリーをパッケージ
jar内のルートディレクトリに依存するjarをコピー、指定したMainクラスではなく、JarRsrcLoaderが実行される。
・生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー
依存するjarの中身は「プロジェクト名_lib」にコピーされ、クラスパスはそちらを参照する