Bundle-NativeCode는 OSGi를 사용할 때, MANIFEST.MF 에 등록하여 사용하는 옵션입니다.
단어 그대로 Java에 Native Code를 사용하기 위해 필요한 옵션입니다.
제가 사용한 곳은 cpu등 시스템 정보를 가져오기 위해 사용했습니다.
다른 옵션은 콤마(,)를 이용하여 구분이 됩니다.
예를 들면, Import-Package 옵션은 각 패키지마다 콤마(,)로 구분합니다.
Import-Package: org.osgi.framework
,org.osgi.service.framework
마찬가지로 Bundle-ClassPath 옵션도 콤마(,)로 구분합니다.
Bundle-ClassPath: .,lib/jna-3.0.9.jar,lib/sigar.jar
이렇듯 대부분의 옵션들이 콤마(,)로써 구분이 되고 있습니다.
Bundle-NativeCode 옵션은 세미콜론(;)으로 구분하고 있습니다.
Bundle-NativeCode: lib/amd64-winnt.dll
;lib/x86-winnt.dll
;lib/x86-winnt.lib
;lib/amd64-linux.so
;lib/x86-linux.so
하지만, 위의 방식이 잘못된 것은 아니지만 어딘지 불완전해 보입니다.
Bundle-NativeCode 옵션에는 osname, osversion, processor 라는 추가 옵션이 있습니다.
그렇습니다. 위 코드들은 os와 processor에 구분이 되어 있지 않습니다.
그리고 하나더 주의해야할 점은 같은 아키택처를 사용하는 native code들은 묶어서 정의해줘야합니다.
그럼 이쁘게 바꿔보겠습니다.
Bundle-NativeCode: lib/amd64-winnt.dll; osname=win32; processor=x86_64,
lib/x86-winnt.dll; lib/x86-winnt.lib; osname=win32; processor=x86,
lib/amd64-linux.so; osname=linux; processor=x86_64,
lib/x86-linux.so; osname=linux; processor=x86
다른 방법도 존재합니다.
Bundle-NativeCode: /lib/x86/ntlmauth.dll;selection-filter="(&(osgi.arch=x86)(osgi.os=win32))",
/lib/x64/ntlmauth.dll;selection-filter="(&(osgi.arch=x86_64)(osgi.os=win32))"
os aliases 들은 http://www.osgi.org/Specifications/Reference 에 있습니다. 참고하시기 바랍니다.