这个问题是这个问题的后续问题。Paul Webster慷慨地帮助我解决了许多问题,但仍然存在一个烦人的问题,而且我相当确定在我导出插件时它归结为类路径问题,而不是在我调试插件时.
到目前为止,这是我通过从网络上的各种来源收集信息(此页面是非常宝贵的资源)得出的可疑信息:
- 插件完全依赖
Bundle-Classpath
于 MANIFEST.MF 文件中的。如果在 JRE 系统库、插件依赖项或文件夹或 JAR 中的任何一个中都找不到该类,则会发生Bundle-Classpath
aNoClassDefFound
orNoClassFound
异常。 - 仅用于
Require-Bundle
我正在创建的捆绑包。(换句话说,我的工作区中的捆绑包。这意味着,我的Require-Bundle
列表将非常短。) - 用于
Import-Package
我的捆绑包需要的 3rd-party 包。这个列表可能相当大,这取决于我使用了多少个 3rd-party 包。 - 如果我需要一个 3rd-party 包,但它没有被导出,我需要为它创建一个包并导出该包。然后,在需要它的包中,我需要导入导出包。
- 如果一个包本身包含包内的包并导出它们,切勿将这些包也作为导入包放入清单中。(换句话说,不要重新导出已经被捆绑包导出的包。)
(我会在社区更正时更新上面的信息。)
因此,考虑到所有这些,我重新设计了我的 MANIFEST.MF 文件,使其符合上述规则。当我调试应用程序时,一切都运行良好。找到了所有类,插件按预期运行,但是当我去导出插件时,事情变得很难看。
当我尝试导出插件时,所有项目都编译除了一个。日志文件包含以下消息:
# 7/3/12 10:09:57 AM EDT
# Eclipse Compiler for Java(TM) 0.A76_R36x, 3.6.2, Copyright IBM Corp 2000, 2010. All rights reserved.
----------
1. ERROR in E:\NotesDev\NotesPlugin\com.auth.lotusplugin.popdlg\src\com\auth\lotusplugin\popdlg\SettingsDialog2.java (at line 0)
package com.auth.lotusplugin.popdlg;
^
The type com.ibm.rcp.swt.swidgets.SCoolBar cannot be resolved. It is indirectly referenced from required .class files
----------
1 problem (1 error)
现在,我确定它com.ibm.rcp.swt.swidgets.SCoolBar
是由 导出的com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar
,而它也恰好是由 导出的com.ibm.rcp.jfaceex_6.2.2.20100729-1241.jar
。在我的项目中,我做了以下事情:
- 通过 Dependencies 选项卡
com.ibm.rcp.jfaceex
作为附加包添加。build.properties
- 在 Dependencies 选项卡上添加
com.ibm.rc.swt.swidgets
为导入包。
尽管如此,当我尝试导出插件时找不到该类。在这一点上,我假设插件在调试时的编译方式与导出时的编译方式之间存在一些根本差异,并且我不知道这种差异是什么。
如果有人可以帮助我解决最后一个问题,我将不胜感激。
以下包括相关部分MANIFEST.MF
和build.properties
文件以供参考。
清单文件
Require-Bundle: com.ibm.lotuslabs.context.service,
com.ibm.lotuslabs.ui,
com.SatuitCRM.WebServices
Import-Package: com.ibm.rcp.jface.action,
com.ibm.rcp.swt.swidgets,
javax.swing,
lotus.domino,
lotus.notes,
org.eclipse.jface.action,
org.eclipse.jface.window,
org.eclipse.swt,
org.eclipse.swt.events,
org.eclipse.swt.graphics,
org.eclipse.swt.layout,
org.eclipse.swt.widgets,
org.eclipse.ui.plugin,
org.osgi.framework
Export-Package: com.auth.lotusplugin.popdlg;
uses:="com.ibm.rcp.jface.action,
com.ibm.lotuslabs.context.service.document,
com.ibm.lotuslabs.ui,
com.ibm.rcp.jface.action,
com.ibm.rcp.swt.swidgets,
com.satuit.core,
com.SatuitCRM.WebServices,
javax.swing,
lotus.domino,
lotus.notes,
org.eclipse.jface.action,
org.eclipse.jface.window,
org.eclipse.swt,
org.eclipse.swt.events,
org.eclipse.swt.graphics,
org.eclipse.swt.layout,
org.eclipse.swt.widgets,
org.eclipse.ui.plugin,
org.osgi.framework"
Bundle-ClassPath: .,
com.satuit.core.jar,
com.ibm.lotuslabs.ui.jar,
com.ibm.lotuslabs.context.service.jar,
com.SatuitCRM.WebService.jar,
lib/activation-1.1.1.jar,
lib/commons-lang3-3.1.jar,
lib/mail.jar,
lib/SatuitCRM_XML_API2.jar
build.properties
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
plugin.xml,\
lib/commons-lang3-3.1.jar,\
lib/activation-1.1.1.jar,\
lib/mail.jar,\
lib/SatuitCRM_XML_API2.jar,\
.
additional.bundles = com.ibm.rcp.browser.ie,\
com.ibm.rcp.jfaceex