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 中运行它时,它工作得很好。我使用Equinox作为我的容器。有什么建议么?

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

您对 bundle 类路径的使用是不寻常的。您应该使用 Import-Package(最佳实践)或 Require-Bundle 来获取依赖项。Bundle 类路径是说所有这些 jar 包都打包在你的 bundle 档案内的 lib 文件夹中。我怀疑情况并非如此,即使是这样,您也将完全绕过 Eclipse 为您提供的所有模块化。

尝试将“javax.mail”包添加到您的 Import-Package 标头。有关为何 Eclipse 不需要这样做的解释,请参阅 i/Why_does_Eclipse_find_javax.swing_but_not_Felix%3F。

于 2012-09-07T14:37:49.897 回答
0

确保您已将 lib 文件夹包含在 bin.includes(清单编辑器中的构建选项卡)中,否则它们不会在最终的 jar 中导出。这是一个非常烦人的“错误”,它在 eclipse 中工作(因为文件可以在文件系统中访问)但构建器将忽略未包含的文件。

于 2018-11-14T09:50:18.490 回答