首页 文章

无法在OSGi中访问javamail中的类

提问于
浏览
0

我有一个OSGi包,我在其中使用java mail api来添加邮件功能 .

我面临的问题是,bundle类加载器没有在加载本地或全局类时创建的classpath变量中添加mail-1.4.jar和activation.jar的条目 .

我在清单中的bundle classpath中添加了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

2 回答

  • 0

    您对bundle类路径的使用是不寻常的 . 您应该使用Import-Package(最佳实践)或Require-Bundle来实现依赖项 . Bundle classpath表示所有这些jar都打包在bundle archive中的lib文件夹中 . 我怀疑情况并非如此,即使是这样,你也完全绕过Eclipse给你的所有模块化 .

    尝试将“javax.mail”包添加到Import-Package标头中 . 有关Eclipse中不需要这个的原因的解释,请参阅i / Why_does_Eclipse_find_javax.swing_but_not_Felix%3F .

  • 0

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

相关问题