插件A使用一个类ClassB,它来自插件B.当"作为eclipse应用程序运行时,一切顺利;但是,当PluginA和插件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)!
答案 0 :(得分:0)
如果您只是将插件复制到Eclipse的“插件”目录中,那么在启动Eclipse时需要指定“-clean”选项以使其重建插件依赖项缓存。
您可以在Eclipse命令行或eclipse.ini文件中指定'-clean'(此处必须在任何-vmargs行之前)。
总是指定-clean是安全的,但它会减慢Eclipse的启动速度。
用选项“-clean”启动eclipse,问题解决了。详情来自reference article:
它的作用:
如果设置为“true”,则使用任何缓存的数据 通过OSGi框架和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