2016-01-12 2 views
4

Я пытаюсь использовать определенный плагин Eclipse с родными зависимостями кода. Эти зависимости всегда остаются нерешенными, поэтому этот плагин никогда не загружается OSGI.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 расслоения банку. Я пробовал много разных вещей, чтобы попытаться заставить уроженца загружаться без успеха.

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

EDIT:

Я изменил 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 
+0

Итак, у вас есть класс в загруженном и инициализированном пакете, статический инициализатор которого выполняет 'System.loadLibrary (« jSSC-2.6_x86_64 »)'? –

+0

@BJHargrave Я понял это. Я сейчас обновлю вопрос. – nimsson

+3

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

ответ

0

В моем случае было RCP приложение, которое остановлено с UnsatisfiedLinkError на DLL, после обновления JRE с 1.8.0.5 до 1.8.0.162. После некоторого поиска я обнаружил, что были две ошибки: one in Java и one in OSGi, которые отменяли друг друга при использовании win32 псевдонима в инструкции Bundle-NativeCode под Windows 10. Причина, по которой она работала до обновления, что Java вернется к умолчанию, если он не знает версию, возвращаемую Windows. Этот отказ был известен OSGi и matched with the win32 alias. Теперь обновление 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 к манифесту, как это сделал автор, также работает. Я решил против этого, потому что у меня было несколько таких родных двоичных файлов в зависимостях, которые не были под моим контролем.