将 Eclipse 插件放在系统类路径上
我正在尝试反序列化位于插件 C 中的类型 A 的对象。
尽管我的插件对具有类型 A 的插件 C 有适当的依赖性,并且还可以创建和实例化类型 A 的对象,但当我尝试反序列化类型的对象时答:失败了。
我相信的原因是,实际进行反序列化的 java.io.* 类看不到类型 A。
我必须在插件 C 的清单中放入什么,以便系统类可以看到类型 A?
这是我得到的堆栈跟踪-
java.lang.ClassNotFoundException:com.chronon.sb.debug.model.TimeAndEventData 在org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494) 在 org.eclipse.osgi.internal.loader.BundleLoader.findClass(Bund leLoader.java:410) 在 org.eclipse.osgi.internal.loader.BundleLoader.findClass(Bund leLoader.java:398) 在 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loa dClass(DefaultClassLoader.java:105) 在 java.lang.ClassLoader.loadClass(来源未知) 在 java.lang.ClassLoader.loadClassInternal(来源未知) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(来源未知) 在 java.io.ObjectInputStream.resolveClass(来源未知) 在 java.io.ObjectInputStream.readNonProxyDesc(来源未知) 在 java.io.ObjectInputStream.readClassDesc(来源未知) 在 java.io.ObjectInputStream.readOrdinaryObject(来源未知) 在 java.io.ObjectInputStream.readObject0(来源未知) 在 java.io.ObjectInputStream.readObject(来源未知) 在 com.chronon.sb.recorder.commons.CompressorUtil.decompressObj ect(CompressorUtil.java:53) 在 com.chronon.sb.recorder.commons.CompressorUtil.decompressObj (CompressorUtil.java:36) 在 com.chronon.sb.debug.core.dbManagers.Events.createBlock(事件 ts.java:134) 在 com.chronon.sb.debug.core.dbManagers.Events.getThreadForTime (Events.java:108) 在 com.chronon.sb.debug.core.helpers.MethodCallHelper.(MethodCallHelper.java:62) 在 com.chronon.sb.debug.core.helpers.MiscHelper.getVeryFirstMet hod(MiscHelper.java:22) 在 com.placid.sb.browser.ui.startbrowse.StartBrowseJob$1.run(Start artBrowseJob.java:86) 在 org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:3 5) 在 org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchr onizer.java:134) 在 org.eclipse.swt.widgets.Display.runAsyncMessages(Display.jav a:3855) 在 org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :3476) 在 org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2405) 在 org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) 在 org.eclipse.ui.internal.Workbench.access$4(Workbench.java:22 21) 在 org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) 在 org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332) 在 org.eclipse.ui.internal.Workbench.createAndRunWorkbench(工作台.java:493) 在org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 在 org.eclipse.ui.internal.ide.application.IDEApplication.start (IDEApplication.java:113) 在 org.eclipse.equinox.internal.app.EclipseAppHandle.run(Eclips eAppHandle.java:194) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:110) 在 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:79) 在 org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) 在 org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(来源未知) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(来源未知) 在 java.lang.reflect.Method.invoke(来源未知) 在 org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) 在 org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) 在 org.eclipse.equinox.launcher.Main.run(Main.java:1311) 在 org.eclipse.equinox.launcher.Main.main(Main.java:1287)
I am trying to desrialize an object of type A located in plugin C.
Although my plugin has the proper dependency on plugin C which has type A and can also create and instantiate an object of type A, when I try to desiralize an object of type A, it fails.
The reason I believe is that the java.io.* classes which are actually doing the deserialization cannot see type A.
What do I have to put in the manifest of plugin C so that the system classes can see type A?
Here is a stack trace I am getting-
java.lang.ClassNotFoundException: com.chronon.sb.debug.model.TimeAndEventData
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInter nal(BundleLoader.java:494)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(Bund leLoader.java:410)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(Bund leLoader.java:398)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loa dClass(DefaultClassLoader.java:105)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.chronon.sb.recorder.commons.CompressorUtil.decompressObj ect(CompressorUtil.java:53)
at com.chronon.sb.recorder.commons.CompressorUtil.decompressObj (CompressorUtil.java:36)
at com.chronon.sb.debug.core.dbManagers.Events.createBlock(Even ts.java:134)
at com.chronon.sb.debug.core.dbManagers.Events.getThreadForTime (Events.java:108)
at com.chronon.sb.debug.core.helpers.MethodCallHelper.(MethodCallHelper.java:62)
at com.chronon.sb.debug.core.helpers.MiscHelper.getVeryFirstMet hod(MiscHelper.java:22)
at com.placid.sb.browser.ui.startbrowse.StartBrowseJob$1.run(St artBrowseJob.java:86)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:3 5)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchr onizer.java:134)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.jav a:3855)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :3476)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2405)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:22 21)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
at org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:493)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start (IDEApplication.java:113)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(Eclips eAppHandle.java:194)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:368)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java: 559)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
at org.eclipse.equinox.launcher.Main.main(Main.java:1287)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
阅读伙伴类加载器(一些更详细的信息是 此处,特别是有关内置好友策略的部分)。
简短的回答是:您需要一个 MANIFEST 条目
Read up on buddy classloaders (some more detailed information is here, especially the section about built-in buddy policies).
The short answer is: you need a MANIFEST-entry