0

OSGi バンドルがあり、メール機能を追加するために Java メール API を使用しています。

私が直面している問題は、バンドル クラス ローダーが、ローカルまたはグローバル クラスのロード中に作成するクラスパス変数に mail-1.4.jar および activation.jar のエントリを追加していないことです。

マニフェストのバンドル クラスパスに mail-1.4.jar と activation.jar を追加しました。これらの jar は単純な jar (OSGi バンドルではありません) です。そして、これらは私のバンドルの lib ディレクトリにあります。javax.mail.Address クラスのロード中に ClassNotFoundException がスローされます。これは、コマンドラインを使用してアプリケーションを実行しているときです。

Eclipseで実行すると、完全に正常に動作します。コンテナーとして分点を使用しています。助言がありますか?

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Workexp
Bundle-SymbolicName: com.gslab.workexp
Bundle-Version: 1.0.0
Bundle-Activator: com.gslab.workexp.Activator
Bundle-Vendor: GSLAB
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.osgi.framework
Bundle-ClassPath: .,
 lib/mysql-connector-java-5.1.20-bin.jar,
 lib/commons-beanutils-1.8.0.jar,
 lib/commons-collections-2.1.1.jar,
 lib/commons-digester-2.1.jar,
 lib/commons-javaflow-20060411.jar,
 lib/commons-logging-1.1.1.jar,
 lib/iText-2.1.7.jar,
 lib/jasperreports-4.6.0.jar,
 lib/jdt-compiler-3.1.1.jar,
 lib/log4j-1.2.9.jar,
 lib/mail-1.4.jar,
 lib/activation.jar
4

2 に答える 2

0

バンドル クラスパスの使用は異常です。依存関係には Import-Package (ベスト プラクティス) または Require-Bundle を使用する必要があります。バンドル クラスパスは、これらすべての jar がバンドル アーカイブ内の lib フォルダー内にパッケージ化されていることを示しています。これは事実ではないと思います。たとえそうであったとしても、Eclipse が提供するすべてのモジュール性を完全に無視していることになります。

「javax.mail」パッケージを Import-Package ヘッダーに追加してみてください。Eclipse でこれが必要ない理由については、i/Why_does_Eclipse_find_javax.swing_but_not_Felix%3F を参照してください。

于 2012-09-07T14:37:49.897 に答える