1


0

Javaマニフェストファイルのクラスパスと、それが相対ディレクトリを決定する方法

MANIFEST.MFファイルのクラスパスはどのように相対位置を決定しますか?

  • 1)* lib / somejar.jar`内にjarを含むJARがあり、マニフェストファイルが META-INF / MANIFEST.MF`内にあるとします。 クラスパスをどのように設定しますか…​? Class-path:lib / somejar.jar`または ../ lib / somejar.jar`でしょうか?

  • 2)* somejar.jarには、メインjarが依存する他のjarも含まれているとします。 そしてもちろん、somejar.jarには、クラスパスフィールドが正しく設定された独自のMANIFEST.MFファイルもあります。 次に、実行中に元のメインjarファイルがそれらのJARファイルの1つにアクセスする必要があると言ってみましょう。somejar.jarがmain.jarのクラスパスにある限りアクセスできますか? または、メインjarが「somejar.jar」を実行しているため、相対ディレクトリが台無しになっていますか?

マイナーアップデート:これはすべて、アプリケーションサーバー上のWeb環境で実行されます。

1 Answer


1


「プレーンバニラ」を実行する場合、JAR内にJARを含めることはできません。 メインJARに関連する既知のパスに外部に配置するか、メインJAR内のJARの内容を抽出するか、または必要があります。

しかし、Eclipse 3.5以降では、組み込みのトリックを使用してこれを行うことができます。 _Export> Runnable JAR file_を選択したときに、2番目の_Library Handling_オプションを確認します。

画像:https://tweakers.net/ext/f/PJfE2YrAGPt25X3Vl5eWv2G5/full.png [alt text]

生成されたJARに_Package必要なライブラリを選択すると、Eclipseは特別なクラスローダーを追加し、メインクラスを実行する前にそれらのJARを透過的にロードします。 http://mail.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.ui/jar%20in%20jar%20loader/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoaderの助けを借りてそれを行っています。 java?view = co [JarRsrcLoader]。