[英]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.ini
文件,並在第一行插入-clean
。 -clean
作為第一個參數。 -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.