簡體   English   中英

Eclipse插件開發:插件A在插件B中使用類,導出為jar並安裝到eclipse后,發生NoClassDefFoundError

[英]Eclipse Plug-ins develop: Plug-in A use a Class in Plug-in B, after exporting as jars and installed in to eclipse, NoClassDefFoundError occurs

插件A使用了一個類B,它來自於插件B。當“以Eclipse應用程序運行”時,一切運行良好; 但是,當PluginA和Plugin B導出為Jar並安裝到新的Eclipse平台時,它們可以獨立運行,但是當代碼到達插件A使用ClassB的行時會崩潰。

錯誤日志:ava.lang.NoClassDefFoundError原因:java.lang.ClassNotFoundException

在插件org.jboss.vpe.browsersim.eclipse中,包org.jboss.vep.browsersim.eclipse.launcher中有BrowserSimLauncher.java;

在插件org.ayound.js.debug.core中,退出一個Java文件“ JsLaunchConfigurationDelegate.java”,然后將BrowserSimLauncher.launchBrowserSim(startUrl)放進去;

在其中,這意味着我在后一個插件中使用了前一個插件的類“ BrowserSimLauncher”。

我還完成所有“依賴項”,包括在后一個插件的manifest.mf中添加行:

Import-Package: org.jboss.tools.vpe.browsersim.eclipse.launcher

和以前的插件的manifest.mf:

Export-Package: org.jboss.tools.vpe.browsersim.eclipse.launcher

在開發環境中,兩個插件都可以成功編譯,當“以Eclipse應用程序運行”時,一切順利,后一個插件可以成功調用BrowserSimLauncher.launchBrowserSim(startUrl); ;
但是,當我將兩個插件導出為幾個.jar文件,並將它們復制到另一個eclipse目錄的/ plugin文件夾中,啟動eclipse時,兩個插件可以獨立運行,但是插件無法調用BrowserSimLauncher.launchBrowserSim(startUrl); 錯誤日志顯示如下:

    !ENTRY org.eclipse.core.jobs 4 2 2015-01-06 16:29:03.817
!MESSAGE An internal error occurred during: "Launching index.html".
!STACK 0
java.lang.NoClassDefFoundError: org/jboss/tools/vpe/browsersim/eclipse/launcher/BrowserSimLauncher
    at org.ayound.js.debug.launch.JsLaunchConfigurationDelegate.launch(JsLaunchConfigurationDelegate.java:101)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858)
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018)
    at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.lang.ClassNotFoundException: org.jboss.tools.vpe.browsersim.eclipse.launcher.BrowserSimLauncher cannot be found by org.ayound.js.debug.core_2.2.0
    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.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 6 more

后一個插件(js.debug.core)找不到前一個插件(browsersim.eclipse)!

如果僅將插件復制到Eclipse的“ plugins”目錄中,則在啟動Eclipse時需要指定“ -clean”選項以使其重建插件依賴項緩存。

您可以在Eclipse命令行或eclipse.ini文件中指定“ -clean”(此處必須在任何-vmargs行之前)。

始終指定-clean是安全的,但是會稍微減慢Eclipse的啟動速度。

補品:

只需使用“ -clean”選項啟動Eclipse,問題就解決了。 詳細信息來自參考文章

它能做什么:

如果設置為“ true”,則將清除OSGi框架和Eclipse運行時使用的所有緩存數據。 這將清除用於存儲捆綁包依賴關系解析和Eclipse擴展注冊表數據的緩存。 使用此選項將強制eclipse重新初始化這些緩存。

如何使用它:

  • 編輯位於Eclipse安裝目錄中的eclipse.ini文件,並在第一行插入-clean
  • 或編輯用於啟動Eclipse的快捷方式,並添加-clean作為第一個參數。
  • 或創建一個批處理或Shell腳本,該腳本使用-clean參數調用Eclipse可執行文件。 此步驟的優點是,您可以保留腳本,並在每次要清理工作區時都使用它。 你可以將其命名類似eclipse-clean.bat (或eclipse-clean.sh )。

(摘自: http : //www.eclipsezone.com/eclipse/forums/t61566.html

其他eclipse命令行選項: http : //help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fruntime-options.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM