Java Manifest.mfクラスパスの問題
-
22-07-2019 - |
質問
jarファイルを実行しようとしました-test.jarと呼びましょう-UnixシステムでSybase jconn3.jarを使用します。
次を含むMANIFEST.MFファイルを作成しました:
Class-Path: $SYBASE/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar
これにより、ClassNotFoundErrorが発生します。 $ SYBASEは、/ opt / sybase13を指すシステム変数です。また、次のことも試しました:
Class-Path: /opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar
and
Class-Path: opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar
ただし、$ SYBASE / jConnect-6_0 / classesからjconn3.jarファイルをtest.jarと同じディレクトリにコピーし、MANIFEST.MFを更新して次のように読み取る場合:
Class-Path: jconn3.jar commons-net-1.3.0.jar
アプリケーションは期待どおりに実行されます。
今、jconn3.jarファイルがローカルにコピーされることで動作することを確認できました。 MANIFEST.MFファイルにはメインクラスへのパスが含まれているため、ここでは問題になりません。
何が問題になると思いますか?私はこのことをずっと見続けてきました。 ありがとう!
解決
クラスパスのエントリは、埋め込まれているJAR(作業中のJAR)に関連するか、URLです。絶対パスを機能させるには、それらをURLに変換する必要があります。例:
file:/ opt / sybase13 /...
変数を使用するメカニズムはありません。
JAR仕様では明確に示されていませんが、絶対 file:
スキームURLはclass-path属性で機能します。
他のヒント
環境変数は、クラスローダーAFAIKによって読み込まれません。ただし、jarを構成スクリプトに追加できます
仕様に従って、エントリは絶対ではなくjarに相対的です:
クラスパス:
この属性の値は、このアプリケーションまたは拡張機能が必要とする拡張機能またはライブラリの相対URLを指定します。 URLは1つ以上のスペースで区切られます。アプリケーションまたは拡張機能クラスローダーは、この属性の値を使用して内部検索パスを構築します。
http://java.sun.com /j2se/1.5.0/docs/guide/jar/jar.html #Manifest Specification