3

Unix システムで Sybase jconn3.jar を使用する jar ファイル (test.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

Class-Path: opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

ただし、jconn3.jar ファイルを $SYBASE/jConnect-6_0/classes から test.jar と同じディレクトリにコピーし、MANIFEST.MF を次のように更新すると、次のようになります。

Class-Path: jconn3.jar commons-net-1.3.0.jar

アプリケーションは期待どおりに実行されます。

これで、jconn3.jar ファイルをローカルにコピーして動作することを確認できました。私の MANIFEST.MF ファイルには Main-Class へのパスが含まれているため、ここでは問題になりません。

何が問題になると思いますか? 私は今、あまりにも長い間このことを見てきました。ありがとう!

4

2 に答える 2

12

クラスパスのエントリは、それらが埋め込まれている (作業している) JAR に対して相対的であるか、URL です。絶対パスを機能させるには、それらを URL に変換する必要があります。

file:/opt/sybase13/...

変数を使用するメカニズムはありません。

JAR 仕様には明確に記載されていませんが、絶対file:スキーム URL は class-path 属性で機能します。

于 2008-12-01T23:03:10.870 に答える
0

環境変数は、クラスローダー AFAIK によって読み取られません。ただし、構成スクリプトにjarを追加できます

仕様によると、エントリは絶対ではなく jar に対して相対的です。

クラスパス:

この属性の値は、このアプリケーションまたは拡張機能が必要とする拡張機能またはライブラリーの相対 URL を指定します。URL は 1 つ以上のスペースで区切られます。アプリケーションまたは拡張クラス ローダーは、この属性の値を使用して内部検索パスを構築します。

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html #マニフェスト仕様

于 2008-12-01T23:06:39.257 に答える