此問題是this one的後續行動。 Paul Webster慷慨地幫我找出我的很多問題,但一個惱人的問題依然存在,而且我敢肯定它歸結爲當我出口插件,而不是當我調試類路徑問題該插件。Eclipse插件:調試與導出類路徑
這是可疑的信息,到目前爲止,我已經想通了,颳了來自各種來源的信息在網絡上(對於這this page是一個非常寶貴的資源):
- 插件完全依賴
Bundle-Classpath
在MANIFEST.MF文件中的。如果在JRE系統庫,插件相關性或Bundle-Classpath
中的文件夾或JAR中找不到該類,則會發生NoClassDefFound
或NoClassFound
異常。 - 使用
Require-Bundle
只對包我創建。 (換句話說,在我的工作區中捆綁銷售,這意味着,我的Require-Bundle
列表將會非常短)。 - 使用
Import-Package
適用於我的捆綁包需要的第三方包。這個列表可能相當大,取決於我使用的第三方軟件包數量。 - 如果我需要一個第三方軟件包,但它並未導出,我需要爲它創建一個軟件包並導出該軟件包。然後,在需要它的包中,我需要導入導出包。
- 如果包本身包含包內的包並將其導出,則不要將這些包也作爲導入包放入Manifest。 (換句話說,不要再出口那些已經被捆綁導出包。)
(我會更新上面作爲社區矯正它的信息。)
所以,所有軸承記住,我已經重寫了我的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
通過依存關係選項卡的附加束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增加了'additional-bundles'。如果在Dependencies選項卡上使用* Automated Management of Dependencies *部分,它將添加指令。 –