У меня есть приложение RCP (называемое RCP-APP). Я создал новый плагин (называемый подключаемым модулем A), который обертывает медиа-плеер api (.jar-файл) и папку библиотек C (DLL), с которой пользовательский интерфейс api обращается через JNA. Затем я создал еще один плагин (называемый подключаемым модулем B), который содержит приложение медиаплеера, которое зависит от подключаемого модуля A.Eclipse RCP/Plug-in Question
Когда активирован подключаемый модуль B, я получаю следующие сообщения об ошибках, сообщающие мне, что Plug- в B не может найти медиа-плеер .dlls его ищет:
!ENTRY org.eclipse.jface 4 2 2009-06-22 10:05:22.475 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface". !STACK 0 java.lang.UnsatisfiedLinkError: Unable to load library 'libvlc': The specified module could not be found. at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:114) at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:157) at com.sun.jna.Library$Handler.(Library.java:123) at com.sun.jna.Native.loadLibrary(Native.java:260) at com.sun.jna.Native.loadLibrary(Native.java:246) at org.videolan.jvlc.internal.LibVlc.(LibVlc.java:41) at org.videolan.jvlc.JVLC.(JVLC.java:45) at com.bah.gs.arts.jekyll.plugins.videolog.VideoLogDisplay.displayStream(VideoLogDisplay.java:32) at com.bah.gs.arts.jekyll.core.extensionpoints.DisplayStreamFactory.getDisplayStreams(DisplayStreamFactory.java:57) at com.bah.gs.arts.jekyll.core.views.medialist.MediaListView$1.doubleClick(MediaListView.java:91) at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:799) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.runtime.Platform.run(Platform.java:880) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:797) at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1419) at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1173) at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:237) at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:234) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:295) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3823) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3422) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2384) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2200) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:490) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at com.bah.gs.arts.jekyll.core.Application.start(Application.java:20) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) 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:386) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Как сообщаю Plug-в B (или RCP-APP), что в библиотеках .dll в определенной папке в Разъемном A?
Похоже, что api ожидает найти DLL через переменную PATH среды.
Как я могу по существу передать «плагин A/Folder-Name»?
Благодарим за помощь.
«IMHO лучше разместить весь код, который напрямую обращается к файлам .DLL в подключаемый модуль A. Таким образом, вам не нужно подвергать внутреннюю файловую структуру вашего плагина своим пользователям.« Это правда, но это касается каждого подключаемого модуля, который я создаю, который использует медиаплеер. Api будет иметь копию DLL и файла .jar. Этого я пытался избежать, разместив файл .jar и. dlls в своем собственном подключаемом модуле. –
В любом случае ..... Я api пытаюсь найти .dlls через переменную PAT. Я ошибался в возможности передать местоположение в качестве параметра api. –
Итак, у вас есть различные плагины, которые вызывают функциональность из .DLL? Вы можете реализовать фасад для этой функции в «подключаемом модуле А», который обрабатывает доступ к .DLL и управляет переменной PATH. Таким образом, вам не нужно делать все это возится в других плагинах. – ftl