2012-07-03 60 views
0

此問題是this one的後續行動。 Paul Webster慷慨地幫我找出我的很多問題,但一個惱人的問題依然存在,而且我敢肯定它歸結爲當我出口插件,而不是當我調試類路徑問題該插件。Eclipse插件:調試與導出類路徑

這是可疑的信息,到目前爲止,我已經想通了,颳了來自各種來源的信息在網絡上(對於這this page是一個非常寶貴的資源):

  • 插件完全依賴Bundle-Classpath在MANIFEST.MF文件中的。如果在JRE系統庫,插件相關性或Bundle-Classpath中的文件夾或JAR中找不到該類,則會發生NoClassDefFoundNoClassFound異常。
  • 使用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.SCoolBarcom.ibm.rcp.swtex.win32_6.2.2.20100729-1241.jar,這也恰好由com.ibm.rcp.jfaceex_6.2.2.20100729-1241.jar出口出口。在我的項目,我已經做了以下內容:

  1. 新增com.ibm.rcp.jfaceex通過依存關係選項卡的附加束build.properties
  2. 將「com.ibm.rc.swt.swidgets」添加爲「依賴項」選項卡上的導入包。

儘管如此,當我試圖導出插件時,無法找到該類。在這一點上,我假設插件在被調試時被編譯的方式與導出時的方式之間存在一些根本的區別,並且我不知道它們之間的區別。

如果有人可以請幫我解決這最後一個問題,我真的很感激。

下面包含了MANIFEST.MFbuild.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 

回答

1

沒有一個明確的答案,但也許這些幫助:

認爲你只需要設置你的目標平臺。確保您的目標平臺包含您所需的不在工作區中的所有捆綁軟件。指定依賴關係時,無論該捆綁包位於工作區還是目標平臺中,您都可以使用Require-Bundle(或更好的Import-Package)。

對於剩下:

  • 導出系統包從你的包(如javax.swing中)通常是一個壞主意,因爲它可以搞砸了分辨率更高版本。你真的應該只從該捆綁軟件包中導出東西

  • 我對'additional.bundles'結構不太熟悉,它不是標準的OSGi,我不認爲你需要它。

+0

Eclipse增加了'additional-bundles'。如果在Dependencies選項卡上使用* Automated Management of Dependencies *部分,它將添加指令。 –