Osgi не будет соответствовать нативный код внутри пакета

Я пытаюсь использовать определенный плагин Eclipse, который имеет родные зависимости кода. Эти зависимости всегда остаются неразрешенными, поэтому этот плагин никогда не загружается OSGI.

MANIFEST.MF

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: PROS Cortex Flash Utility
    Bundle-SymbolicName: com.purduesigbots.vexflash; singleton:=true
    Bundle-Version: 1.0.0.6
    Bundle-Activator: com.purduesigbots.vexflash.Activator
    Bundle-Vendor: Purdue ACM SIG BOTS
    Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.co
     re.resources,org.eclipse.ui.ide;bundle-version="3.7.0",org.eclipse.de
     bug.ui;bundle-version="3.7.0"
    Bundle-RequiredExecutionEnvironment: JavaSE-1.6
    Bundle-ActivationPolicy: lazy
    Bundle-NativeCode:
      /libs/windows/jSSC-2.6_x86_64.dll;
      osname=win32; processor=x86_64, *
    Bundle-ClassPath: .,jna.jar,platform.jar

Путь к dll - /libs/windows/jSSC-2.6_x86_64.dll внутри jar-пакета. Я пробовал много разных вещей, чтобы попытаться загрузить натив, но безуспешно.

Как я могу получить OSGI для загрузки нативной библиотеки? Я использую JRE 8 64 бит на Windows 10.

РЕДАКТИРОВАТЬ:

Я изменил MANIFEST.MF так, чтобы он работал

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: PROS Cortex Flash Utility
Bundle-SymbolicName: com.purduesigbots.vexflash; singleton:=true
Bundle-Version: 1.0.0.6
Bundle-Activator: com.purduesigbots.vexflash.Activator
Bundle-Vendor: Purdue ACM SIG BOTS
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.co
 re.resources,org.eclipse.ui.ide;bundle-version="3.7.0",org.eclipse.de
 bug.ui;bundle-version="3.7.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-NativeCode:
#The OS name is not in OS aliases for OSGI, so the full name must be used
  /libs/windows/jSSC-2.6_x86_64.dll;
  osname=win32; osname="Windows 10"; processor=x86_64
Bundle-ClassPath: .,jna.jar,platform.jar

1 ответ

В моем случае было приложение RCP, которое остановилось с ошибкой UnsatisfiedLinkError в DLL после обновления JRE с 1.8.0.5 до 1.8.0.162. После некоторых поисков я обнаружил, что есть две ошибки, одна в Java и одна в OSGi, которые исключают друг друга при использовании псевдонима win32 в инструкции Bundle-NativeCode под Windows 10. Причина, по которой это работало до обновления, заключалась в том, что эта Java вернется к значению по умолчанию, если она не знает версию, возвращаемую Windows. Этот запасной вариант был известен OSGi и соответствовал псевдониму win32. Теперь обновление Java означало, что по умолчанию больше не будет использоваться, а вместо этого "Windows 10". Однако версии OSGi, предшествующие Luna, не знали Windows 10 и, следовательно, не соответствовали псевдониму win32.

Обходной путь, с которым я пошел, был, переопределяя свойство org.osgi.framework.os.name соответственно, которое было жизнеспособно, потому что не было никакой другой цели для этого приложения:

-Dorg.osgi.framework.os.name=win32

Лучшим решением в большинстве случаев было бы обновить OSGi по крайней мере до 3.10.0.

Конечно, добавление "Windows 10" в качестве дополнительного имени os.name в манифест, как это сделал автор, также работает. Я отказался от этого, потому что у меня было несколько таких собственных двоичных файлов в зависимостях, которые не были под моим контролем.

Другие вопросы по тегам