2012-07-19 79 views
2

我在eclipse juno中構建了一個eclipse特性項目,當我從IDE啓動程序時,一切正常,控制檯中沒有錯誤。如何在eclipse rcp build中解決ClassNotFoundException?

當我導出產品時,它運行但它不顯示我在Application.e4xmi文件(僅灰色背景)中創建的零件的內容。當我在導出的文件夾查看配置文件夾沒有與下面的錯誤日誌文件:

!ENTRY org.eclipse.e4.ui.workbench 4 0 2012-07-19 19:22:13.859 
MESSAGE Unable to load class 'be.yt.diepvriezer.ui.handlers.ExitHandler' from bundle '2' 

ENTRY org.eclipse.e4.ui.workbench 4 0 2012-07-19 19:22: 13.859 !MESSAGE無法從bundle'2'加載類'be.yt.diepvriezer.ui.handlers.ExitHandler' !STACK 0 java.lang.ClassNotFoundException:be.yt.diepvriezer.ui.handlers.ExitHandler at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi。在在java.lang.ClassLoader.loadClass中使用org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) (ClassLoader.java: 247) .....

對於我在應用程序模型中創建的每個處理程序和部分都是如此。

我檢查了build.properties和manifest文件,一切都在那裏。

有人可以指出我正確的方向如何解決這個問題嗎?

回答

0

沒有解決,只是需要檢查的事項:

當你看plugins/子目錄出口產品過程中,它包含了插件爲您be.yt.diepvriezer.ui.handlers.ExitHandler? 如果不是,則需要將該插件添加到產品中。從IDE內部啓動RCP產品時,通常會包含工作區中的所有插件,但是當您導出產品時,您確實需要列出您想要包含在*.product文件中的所有插件(直接或通過*.feature s )

當你解壓縮插件jar文件時,...ExitHandler類真的在那裏嗎?如果不是,則產品出口中的某些內容失敗。

Application.e4xmi是指代碼..ExitHandler與代碼相同的插件嗎?如果不是,則包含Application.e4xmi的插件的類加載器無法訪問提供..ExitHandler的'other'插件中的代碼。

+0

謝謝你的回答。檢查插件文件夾:它包含正確的插件的我解壓縮的jar文件和類是在裏面。 Application.e4xmi文件位於包含處理程序代碼的插件中。 – 2012-07-20 04:11:15

+0

再次,沒有解決方案,只是猜測接下來要檢查什麼。確實讓人費解。當您使用eclipse IDE進行RCP開發時,它包含源代碼。所以你可以打開'BundleLoader'類(Menu Navigate,Open Type,...),在'findClassInternal'方法中設置一個斷點,或許是'name.equals(「be ..... ExitHandler」 )'並試圖找出它爲什麼失敗。例如'BundleLoader.bundle'應該指向包含ExitHandler的bundle。也許在調試器中,你會得到一些暗示,爲什麼它找不到類:尋找錯誤的包? – Kay 2012-07-21 19:33:46

+0

問題的關鍵在於,您必須將IDE的調試器附加到導出的產品上,因爲在IDE中它似乎都可以正常工作。 – Kay 2012-07-21 19:40:01

2

有時您需要使用「-clean」啓動應用程序,或者定義「osgi.clean = true」以確保清除緩存的依賴關係。在乾淨的工作空間中啓動將具有相同的效果(沒有緩存值):

「OSGi框架和eclipse運行時使用的任何緩存數據都將被擦除乾淨,這將清理用於存儲捆綁依賴解析和eclipse的緩存擴展註冊表數據,使用這個選項將強制eclipse重新初始化這些緩存。「

更多信息here