【发布时间】:2012-07-03 16:00:18
【问题描述】:
这个问题是this one 的后续问题。 Paul Webster 慷慨地帮助我解决了许多问题,但仍然存在一个烦人的问题,我相当确定当我导出插件时它归结为类路径问题,而不是到我调试插件的时候。
这是我迄今为止通过从网络上的各种来源收集信息(this page 是非常宝贵的资源)得出的可疑信息:
- 插件完全依赖于 MANIFEST.MF 文件中的
Bundle-Classpath。如果在 JRE 系统库、插件依赖项或Bundle-Classpath的文件夹或 JAR 中找不到该类,则会发生NoClassDefFound或NoClassFound异常。 -
Require-Bundle仅用于我正在创建的捆绑包。 (换句话说,我的工作区中的捆绑包。这意味着,我的Require-Bundle列表将会很短。) - 将
Import-Package用于我的捆绑包所需的第 3 方包。此列表可能相当大,具体取决于我使用的 3rd 方软件包的数量。 - 如果我需要第 3 方包,但它没有被导出,我需要为它创建一个包并导出该包。然后,在需要它的包中,我需要导入导出包。
- 如果包本身包含包内的包并导出它们,切勿将这些包也作为导入包放入清单中。 (换句话说,不要重新导出已经被捆绑包导出的包。)
(我会在社区更正时更新以上信息。)
因此,考虑到所有这些,我重新设计了我的 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 也恰好是由com.ibm.rcp.jfaceex_6.2.2.20100729-1241.jar 导出的。在我的项目中,我做了以下事情:
- 通过“依赖项”选项卡将
com.ibm.rcp.jfaceex作为附加包添加到build.properties。 - 在“依赖项”选项卡上添加了
com.ibm.rc.swt.swidgets作为导入包。
但是,当我尝试导出插件时找不到该类。在这一点上,我假设插件在调试时的编译方式与导出时的编译方式之间存在一些根本差异,并且我不知道这种差异是什么。
如果有人可以帮我解决最后一个问题,我将不胜感激。
MANIFEST.MF 和build.properties 文件的相关部分包含在下面以供参考。
MANIFEST.MF
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
【问题讨论】:
标签: eclipse eclipse-plugin osgi