0

我正在开发一个需要访问类的插件org.eclipse.swt.widgets.Display。此类包含在org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar. 但是,该类也由清单导出,com.ibm.rcp.jfaceex_6.2.2.20100729-1241如下所示:

Export-Package: com.ibm.rcp.jface.action,com.ibm.rcp.jface.launcher,co
 m.ibm.rcp.jface.themes,com.ibm.rcp.jface.util,com.ibm.rcp.jface.viewe
 rs,com.ibm.rcp.jface.window,com.ibm.rcp.jface.window.effects,com.ibm.
 rcp.ui.widgets.api.jface,com.ibm.rcp.ui.widgets.api.swt
Require-Bundle: com.ibm.rcp.swtex,org.eclipse.swt,org.eclipse.core.run
 time,org.eclipse.jface,org.eclipse.ui

现在,com.ibm.rcp.jfaceex不包含在我的 JRE 系统库中但是,它是一个包,其中包含自己的类以及上面的导出包。

我被引导相信在我自己的项目中我需要做的就是在我自己的项目的构建路径中包含对它的引用,但这似乎不起作用。编译器无法针对org.eclipse.swt.widgets包中的类解析导入语句。

如果我需要这些类,我究竟需要做什么才能正确导入它们,并且工作量最少?

注意我们没有使用 Maven 或任何第三方构建工具。这是管理层规定的,我无法更改。

更新

根据下面 E-Riz 的建议,我添加org.eclipse.swt到插件的 Dependencies 选项卡的 Required Bundles 部分。然后,我尝试按如下方式导出项目:

  1. 右键单击项目,选择导出。
  2. 选择插件开发 -> 可部署的插件和片段
  3. 全选,然后点击完成

Eclipse 构建项目,然后告诉我有错误。检查日志会发现以下错误:

1. ERROR in E:\NotesDev\Plug-in\com.ibm.lotuslabs.ui\src\com\ibm\lotuslabs\ui\UI.java (at line 1)
    /**
    ^
The type org.eclipse.swt.widgets.Shell cannot be resolved. It is indirectly referenced from required .class files

我的代码中有很多这样的代码;每个对 org.eclipse.swt 命名空间包中的类或方法的引用。这一点,尽管捆绑包调试得很好!

更新 2

事实上,我发现您可以将绝对路径放入Bundle-Classpathin 中MANIFEST.MF。奇怪的是,这使得编译时错误消失了。在这一点上,我不相信这是正确的做法,因为绝对路径肯定不能保证与最终用户的配置相对应。

但是,将插件安装到 Notes(目标平台)中并没有按预期工作。

Notes 报告插件安装成功,但插件(工具栏的一个补充)没有出现。在这一点上,我假设类路径的某些内容仍然不正确。

更新 3

根据请求,MANIFEST.MFbuild.properties文件。请注意绝对路径是 Eclipse 通过 Dependencies 和 Runtime 选项卡添加的。

MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Context Plug-in
Bundle-SymbolicName: com.ibm.lotuslabs.context.service;singleton:=true
Bundle-Version: 1.0.2
Bundle-Vendor: IBM
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Activator: com.ibm.lotuslabs.context.service.internal.ContextPlugin
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: context.jar,
 lib/activation-1.1.1.jar,
 lib/mail.jar,
 lib/SatuitCRM_XML_API2.jar,
 lib/commons-lang3-3.1/commons-lang3-3.1.jar,
 E:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.eclipse.ui.views,
 org.eclipse.swt,
 com.ibm.rcp.swtex,
 com.ibm.rcp.jfaceex,
 com.satuit.core 
Export-Package: com.ibm.lotuslabs.context.service.document,
 com.ibm.lotuslabs.context.service.internal
Import-Package: org.eclipse.core.resources

build.properties

output.. = bin/
bin.includes = META-INF/,\
               context.jar,\
               lib/activation-1.1.1.jar,\
               lib/mail.jar,\
               lib/commons-lang3-3.1.jar,\
               lib/SatuitCRM_XML_API2.jar,\
               plugin.xml,\
               E:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar
jars.compile.order = context.jar
source.context.jar = src/
4

3 回答 3

3

仅仅因为一个包在其Export-Package声明中命名一个包并不一定意味着它包含该包的代码。一个包可以从它所依赖的包中导出包(尽管我认为在大多数情况下这通常是一个坏主意)。

对您来说,解决方案很简单:在您MANIFEST.MF转到 Dependendencies 选项卡并添加org.eclipse.swt所需插件列表中

于 2012-07-06T16:42:03.923 回答
2

不太确定,但我想到了两件事。

  • 从项目类路径中删除 jar 并将 com.ibm.rcp.jfaceex jar 添加到目标平台(Preferences->PDE->Target platform 并指向包含 com.ibm.rcp.jfaceex jar 的目录)

  • 或者留下引用并将 jar 添加到您的包类路径(在清单的运行时选项卡上)

它不太清楚这将如何导致错误,但类路径问题可以在 PDE 中以奇怪的方式表现出来。

于 2012-07-12T06:08:00.433 回答
0

我查看了 eclipse juno 中的 swt 相关包:org.eclipse.swt_3.100.0.v4233d.jar org.eclipse.swt.win32.win32.x86_3.100.0.v4233d.jar

小部件位于第二个包中,这是第一个包的片段。

因此,您必须确保两个捆绑包都在目标平台中。我不确定 require bundle 在这种情况下是否有效(它可能有效)。您可以尝试导入您需要的所有包。特别是您需要在包 org.eclipse.swt.widgets 上使用 Import-Package。

于 2012-07-12T10:34:31.720 回答