Отдельная DLL и нативный вызов в другом плагине - PullRequest
1 голос
/ 16 марта 2009

Я хочу отделить некоторые библиотеки DLL от связанных собственных классов JNI.

Плагины:

  • В плагине А находятся dll и загружен, когда плагин загружен.
  • В Плагин B (зависит от A) JNI размещены классы, которые включают в себя вызовы нативных методов для DLL в A.

Во время выполнения я получаю UnsatisfiedLinkError, потому что класс JNI не может быть найден. Я пытаюсь обновить логику загрузчика классов, обновив файлы MANIFEST:

Плагин A:

Eclipse-BuddyPolicy: registered

Плагин B:

Eclipse-RegisterBuddy: A

Но это тоже не работает. Вы знаете решение?

EDIT:

Манифест A:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx ;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: xxx.Plugin
Bundle-Vendor: xxx
Bundle-Localization: plugin
Bundle-NativeCode: native/dll/x1.dll;
 native/dll/x2.dll;
 native/dll/x3.dll;
 native/dll/x4.dll;
 native/dll/x5.dll;
 native/dll/x76.dll;
 native/dll/x.dll;
 native/dll/x7.dll;osname = win32; processor = x86
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.logging
Bundle-ClassPath: .
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
Eclipse-BuddyPolicy: registered
Export-Package: xxx

МАНИФЕСТ B:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx;singleton:=true
Bundle-Version: 2.1.16
Bundle-Vendor: xxx
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.lang,
 org.apache.commons.logging,
 A
Export-Package: xxx
Bundle-ClassPath: .
Bundle-Activator: xxx
Eclipse-RegisterBuddy: A
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy

1 Ответ

1 голос
/ 18 марта 2009

Мое непосредственное предложение состоит в том, чтобы превратить плагин B в фрагмент для плагина A, а не в отдельный плагин, что позволило бы устранить проблемы.

Тем не менее, я думаю, что вы изменили свои манифесты; плагин B, который пытается выполнить вызовы JNI, должен иметь Eclipse-BuddyPolicy:registered, а плагин A должен зависеть от плагина B. и регистрироваться с ним.

Тем не менее, после прочтения документации по загрузке я не уверен, что политика загрузки работает для файлов классов, отличных от Java.

...