访问Eclipse可部署插件中的资源 [英] Accessing a resource in an Eclipse deployable plugin

查看:97
本文介绍了访问Eclipse可部署插件中的资源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个Eclipse插件。
在我的插件里面我有以下代码:

  Bundle bundle = Platform.getBundle(org.eclipse.acceleo .EcoreDiff2EDelta); 
URL fileURL = bundle.getEntry(src / metamodel / EcoreDiff.ecore);
String uri = null;
尝试{
uri = FileLocator.resolve(fileURL).getFile();
} catch(IOException e1){
e1.printStackTrace();
}

资源资源= resourceSet.getResource(URI.createURI(uri),true);

此代码访问位于我的插件内的资源(EcoreDiff.ecore),位于src / metamodel中夹。
当我运行插件通过右键单击项目文件夹 - >运行为 - > eclipse应用程序一切正常。
但是如果我将插件导出为可部署的插件和片段
我得到跟随的堆栈跟踪,这基本上意味着它找不到EcoreDiff.ecore文件。
我一直在努力解决这两天,我没有弄错什么...

  java.lang.reflect.InvocationTargetException $ org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
org.eclipse.jface.dialogs.ProgressMonitorDialog.run中的
(ProgressMonitorDialog.java :507)
在org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:275)
在org.eclipse.ui.internal.progress.ProgressManager $ 3.run(ProgressManager。 java:960)
在org.eclipse.swt.custom.BusyIndi​​cator.showWhile(BusyIndi​​cator.java:70)
在org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java: 995)
在org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:970)
在org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java: 1166)
在org.eclipse.acceleo.EcoreDiff2EDelta.ui.popupMenus.AcceleoGenerateEcoreDiff2EDeltaAction.run(AcceleoGenerateEcoreD iff2EDeltaAction.java:91)
在org.eclipse.ui.actions.ActionDelegate.runWithEvent(ActionDelegate.java:70)
在org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java: 241)
在org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
在org.eclipse.jface.action.ActionContributionItem.access $ 2(ActionContributionItem.java:501)
在org.eclipse.jface.action.ActionContributionItem $ 5.handleEvent(ActionContributionItem.java:411)
在org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
在org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
在org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
在org.eclipse .swt.widgets.Display.readAndDispatch(Display.java:3758)
在org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine $ 9.run(PartRenderingEngine.java:1022)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
在org.ecl ipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:916)
在org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
在org.eclipse.ui.internal.Workbench $ 5.run(Workbench.java:585)
在org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
在org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
在org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
在org.eclipse .ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
在org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
在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:353)
在org.eclipse.c ore.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
在java.lang.reflect.Method.invoke(Unknown Source)
在org.eclipse.equinox.launcher.Main.invokeFramework(Main .java:629)
在org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
在org.eclipse.equinox.launcher.Main.run(Main.java:1438 )
在org.eclipse.equinox.launcher.Main.main(Main.java:1414)
导致:java.lang.NullPointerException
在org.eclipse.core.internal.runtime .Activator.getURLConverter(Activator.java:321)
在org.eclipse.core.runtime.FileLocator.resolve(FileLocator.java:227)
在org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate .registerPackages(Generate.java:359)
在org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.initialize(AbstractAcceleoGenerator .java:422)
在org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate。< init>(Generate.java:97)
在org.eclipse.acceleo.EcoreDiff2EDelta.ui.common。 GenerateAll.doGenerate(GenerateAll.java:90)
在org.eclipse.acceleo.EcoreDiff2EDelta.ui.popupMenus.AcceleoGenerateEcoreDiff2EDeltaAction $ 1.run(AcceleoGenerateEcoreDiff2EDeltaAction.java:76)
在org.eclipse.jface.operation .ModalContext $ ModalContextThread.run(ModalContext.java:121)
根异常:
java.lang.NullPointerException
在org.eclipse.core.internal.runtime.Activator.getURLConverter(Activator。 java:321)
在org.eclipse.core.runtime.FileLocator.resolve(FileLocator.java:227)
在org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate.registerPackages(Generate.java: 359)
在org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.initialize(AbstractAcceleoGenerator.java:422)
在org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate。< init>(生成.java:97)
在org.eclipse.acceleo.EcoreDif f2EDelta.ui.common.GenerateAll.doGenerate(GenerateAll.java:90)
在org.eclipse.acceleo.EcoreDiff2EDelta.ui.popupMenus.AcceleoGenerateEcoreDiff2EDeltaAction $ 1.run(AcceleoGenerateEcoreDiff2EDeltaAction.java:76)
在org .eclipse.jface.operation.ModalContext $ ModalContextThread.run(ModalContext.java:121)


解决方案

在您部署的插件中,如果在build.properties中指定了元模型,则应该是jar的根目录中的一个文件夹。如果你在罐子里看,是不是在那里?



然后尝试:

  URL url = bundle.getEntry(metamodel / EcoreDiff.ecore); 
URL fileURL = org.eclipse.core.runtime.FileLocator.toFileURL(URL);


I'm developing an Eclipse Plugin. Inside my plugin I have the following code:

Bundle bundle = Platform.getBundle("org.eclipse.acceleo.EcoreDiff2EDelta");
URL fileURL = bundle.getEntry("src/metamodel/EcoreDiff.ecore");
String uri = null;
try {
        uri = FileLocator.resolve(fileURL).getFile();
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    Resource resource = resourceSet.getResource(URI.createURI(uri), true);

This code accesses a resource (EcoreDiff.ecore) which resides inside my plugin, in the src/metamodel folder. When I run the plugin by right clicking on the project folder -> run as -> eclipse application everything works fine. But if I export the plugin as "Deployable Plugin and Fragments" I get the stack trace that follows, which basically means that it could not find the EcoreDiff.ecore file. I've been trying to fix this for two days, I don't get whats wrong...

java.lang.reflect.InvocationTargetException
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507)
at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:275)
at org.eclipse.ui.internal.progress.ProgressManager$3.run(ProgressManager.java:960)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:995)
at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:970)
at org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:1166)
at org.eclipse.acceleo.EcoreDiff2EDelta.ui.popupMenus.AcceleoGenerateEcoreDiff2EDeltaAction.run(AcceleoGenerateEcoreDiff2EDeltaAction.java:91)
at org.eclipse.ui.actions.ActionDelegate.runWithEvent(ActionDelegate.java:70)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:241)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1022)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:916)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:585)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:540)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
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(EclipseStarter.java:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
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:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: java.lang.NullPointerException
at org.eclipse.core.internal.runtime.Activator.getURLConverter(Activator.java:321)
at org.eclipse.core.runtime.FileLocator.resolve(FileLocator.java:227)
at org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate.registerPackages(Generate.java:359)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.initialize(AbstractAcceleoGenerator.java:422)
at org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate.<init>(Generate.java:97)
at org.eclipse.acceleo.EcoreDiff2EDelta.ui.common.GenerateAll.doGenerate(GenerateAll.java:90)
at org.eclipse.acceleo.EcoreDiff2EDelta.ui.popupMenus.AcceleoGenerateEcoreDiff2EDeltaAction$1.run(AcceleoGenerateEcoreDiff2EDeltaAction.java:76)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Root exception:
java.lang.NullPointerException
at org.eclipse.core.internal.runtime.Activator.getURLConverter(Activator.java:321)
at org.eclipse.core.runtime.FileLocator.resolve(FileLocator.java:227)
at org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate.registerPackages(Generate.java:359)
at org.eclipse.acceleo.engine.service.AbstractAcceleoGenerator.initialize(AbstractAcceleoGenerator.java:422)
at org.eclipse.acceleo.EcoreDiff2EDelta.main.Generate.<init>(Generate.java:97)
at org.eclipse.acceleo.EcoreDiff2EDelta.ui.common.GenerateAll.doGenerate(GenerateAll.java:90)
at org.eclipse.acceleo.EcoreDiff2EDelta.ui.popupMenus.AcceleoGenerateEcoreDiff2EDeltaAction$1.run(AcceleoGenerateEcoreDiff2EDeltaAction.java:76)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

解决方案

In your deployed plugin, "metamodel" should be a folder in the root of your jar, if it is specified in your build.properties. If you look in the jar, is it there?

Then try:

URL url = bundle.getEntry("metamodel/EcoreDiff.ecore");
URL fileURL = org.eclipse.core.runtime.FileLocator.toFileURL(URL);

这篇关于访问Eclipse可部署插件中的资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆