2016-01-05 3 views
0

Я разработал небольшую функцию затмения, которая состоит из четырех плагинов, которые я написал.Как правильно построить плагин/функцию

Все это прекрасно работает при тестировании в новом приложении eclipse (Run As...->Eclipse Application), но теперь я пытаюсь создать эту функцию, чтобы ее можно было установить в других приложениях eclipse.
Я попытался использовать мастер экспорта PDE для экспорта моей функции в качестве развертываемой функции, но когда я пытаюсь установить экспортированную функцию, я получаю сообщение There are no categorized items.

Следующая попытка, которую я сделал, была через проект сайта обновления, где я добавил новую категорию, а затем добавил свою функцию.
Теперь я создаю плагин, и я могу его установить, но всякий раз, когда я пытаюсь его использовать (это новый редактор), он не может открыть мой редактор и дает некоторые ошибки, которые не возникали при тестировании моего плагина.

Есть ли способ создать функцию так, как она создается при запуске нового приложения eclipse? Или мне нужно определить некоторые дополнительные вещи, чтобы создать мою функцию?

EDIT
Ошибки, протекающие:

eclipse.buildId=4.5.1.M20150904-0015 
java.version=1.8.0_45 
java.vendor=Oracle Corporation 
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE 
Framework arguments: -product org.eclipse.epp.package.java.product 
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product 

org.eclipse.e4.ui.workbench 
Error 
Tue Jan 05 13:57:28 CET 2016 


java.lang.IllegalArgumentException: URI is not hierarchical 
    at java.io.File.<init>(Unknown Source) 
    at raven.sqdev.editors.sqfeditor.SQFKeywordProvider.getKeywords(SQFKeywordProvider.java:33) 
    at raven.sqdev.editors.KeywordScanner.<init>(KeywordScanner.java:34) 
    at raven.sqdev.editors.sqfeditor.SQFConfiguration.getKeywordScanner(SQFConfiguration.java:48) 
    at raven.sqdev.editors.sqfeditor.SQFConfiguration.getPresentationReconciler(SQFConfiguration.java:57) 
    at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:457) 
    at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3427) 
    at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) 
    at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:447) 
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:151) 
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPartControl(CompatibilityEditor.java:99) 
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:341) 
    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.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:898) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:879) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:121) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:345) 
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:264) 
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162) 
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104) 
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:73) 
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:55) 
    at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:971) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:640) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:746) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:717) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:711) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:695) 
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$1.handleEvent(PartServiceImpl.java:99) 
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40) 
    at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:186) 
    at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145) 
    at org.eclipse.swt.widgets.Display.syncExec(Display.java:4761) 
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:211) 
    at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36) 
    at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:197) 
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197) 
    at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) 
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) 
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) 
    at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135) 
    at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78) 
    at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39) 
    at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:85) 
    at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:59) 
    at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374) 
    at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:171) 
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:494) 
    at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:458) 
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:724) 
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:396) 
    at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1166) 
    at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3234) 
    at org.eclipse.ui.internal.WorkbenchPage.access$25(WorkbenchPage.java:3149) 
    at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:3131) 
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) 
    at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3126) 
    at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3090) 
    at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3080) 
    at org.eclipse.ui.ide.IDE.openEditor(IDE.java:541) 
    at org.eclipse.ui.ide.IDE.openEditor(IDE.java:500) 
    at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:360) 
    at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:167) 
    at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:268) 
    at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:233) 
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) 
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) 
    at org.eclipse.jdt.internal.ui.packageview.PackageExplorerActionGroup.handleOpen(PackageExplorerActionGroup.java:376) 
    at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$4.open(PackageExplorerPart.java:538) 
    at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) 
    at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:854) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50) 
    at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173) 
    at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:851) 
    at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1168) 
    at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1275) 
    at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278) 
    at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272) 
    at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313) 
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4362) 
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1113) 
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4180) 
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3769) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1127) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) 
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018) 
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156) 
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:654) 
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337) 
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598) 
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) 
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139) 
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) 
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380) 
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) 
    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:669) 
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608) 
    at org.eclipse.equinox.launcher.Main.run(Main.java:1515) 
+0

Какие ошибки это даст вам, что не произошло во время тестирования? Тестирование в Eclipse не проверяет все, что должно быть правильно в экспортированном плагине/функции. –

+0

см. Мой отредактированный ответ – Raven

+1

Что делает 'SQFKeywordProvider' в строке 33? Откуда появился «Файл»? При догадках вы пытаетесь сделать что-то вроде чтения из банки с помощью «Файл» - это не будет отображаться при тестировании, потому что плагин не был сжат в банку. –

ответ

0

Вы не можете использовать File для чтения объектов в плагине банке непосредственно. Используйте FileLocator класс в плагине, чтобы получить URL, вы можете использовать:

Bundle bundle = FrameworkUtil.getBundle(getClass()); 

URL url = FileLocator.find(bundle, new Path("path within the plugin"), null); 

url = FileLocator.toFileURL(url); 

FileLocator.toFileURL может распаковать плагин во временную папку, чтобы дать вам URL, который можно использовать для чтения файла.

Это должно найти все, что находится в Bundle-Classpath для плагина.

Вы можете прочитать из другого плагина, получая Bundle для плагина с помощью:

Bundle bundle = Platform.getBundle("plugin id"); 
Смежные вопросы