这个真的把我难住了。
设想:
- Windows 7 64 位
- Lotus Notes (8.5.2)
- 日食太阳神
- 带有 JDK 7 的 Java 6 更新 33(64 位)
- 为插件项目安装的 JRE 设置为使用安装在 Notes 下的 JVM(即
C:\NotesDev\Notes\jvm
)。 - Target Platform 使用上面安装的 JRE,并在 Locations 选项卡上导入
framework\rcp\eclipse
和子文件夹。framework\shared\eclipse
我可以看到两个文件夹之间总共有 713 个插件可用。 - 运行配置显示总共选择了 714 个插件(其中包括来自目标平台的 713 和我的)。我可以看到这个列表同时包含
org.eclipse.swt.win32.win32.x86_3.5.2.v34557f-RCP20100710-0200.jar
和com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar
。
问题:
- 如果我没有在构建路径中明确包含上述两个 JAR 文件,应用程序将无法编译(尝试导入
org.eclipse.swt.widgets.Display
和com.ibm.rcp.swt.swidgets.SToolItem
)。 NoClassDefFound
如果我在构建路径中包含上述 JAR 文件,应用程序会编译,但由于异常而不会运行。
问题:
- 为什么我需要首先包含这些文件?它们是工作区的一部分,我引用的其他 JAR 文件似乎都不需要显式引用。
- 为什么这在运行时失败?我的理解是,
NoClassDefFound
发生这种情况是因为该类在编译时可用,但在运行时不可用。但这发生在同一台机器上。(我正在尝试在本地调试它,我什至已将 JAR 文件标记为导出!)
在我看来,如果文件列在运行时配置的加载插件选项卡中,我就不必明确引用它们。我对此不正确吗?(请客气!我承认我不是这方面的专家。)
提前致谢。
PS 值得注意的是,如果我将文件包含在构建路径中,我可以看到它们在MANIFEST.MF
文件中都被正确引用.CLASSPATH
。
清单.MF 内容
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Plugin
Bundle-SymbolicName: com.satuit.crm.plugin;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.satuit.crm.plugin.Activator
Bundle-Vendor: Satuit Technologies, Inc.
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.apache.axis,
org.eclipse.ui;bundle-version="3.4.2",
org.eclipse.core.runtime;bundle-version="3.4.0",
org.eclipse.ui.views;bundle-version="3.3.1",
com.ibm.rcp.jfaceex;bundle-version="6.2.2"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Export-Package: com.satuit.crm.plugin,
com.satuit.crm.plugin.document,
com.satuit.crm.plugin.ui,
com.satuit.crm.webservice.agent
Bundle-ClassPath: .,
/NotesDev/Notes/framework/rcp/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar,
/NotesDev/Notes/framework/rcp/eclipse/plugins/com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar,
/NotesDev/lib/activation-1.1.1.jar,
/NotesDev/lib/mail.jar,
/NotesDev/lib/commons-lang3-3.1.jar,
/NotesDev/lib/SatuitCRM_XML_API2.jar
** .CLASSPATH 内容 **
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/com.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Workspace/lib/commons-lang3-3.1.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Workspace/lib/activation-1.1.1.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Workspace/lib/mail.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Workspace/lib/SatuitCRM_XML_API2.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.apache.axis_1.4.0.20100729-1241/axispatch.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.apache.axis_1.4.0.20100729-1241/axis.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.apache.axis_1.4.0.20100729-1241/jaxrpc.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.apache.axis_1.4.0.20100729-1241/saaj.jar"/>
<classpathentry exported="true" kind="lib" path="C:/NotesDev/Notes/framework/rcp/eclipse/plugins/org.apache.axis_1.4.0.20100729-1241/wsdl4j-1.5.1.jar"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>