2012-07-05 3 views
0

OSGi 및 Apache Felix Shell을 사용하여 명령 구성 요소를 만들었습니다. 한 명령은 SWT UI를 시작하는 새 스레드를 엽니 다.OSGi/BND : OS에 따라 요구 사항이 다르다

BND 구성에서 SWT 번들은이 구성 요소를 빌드하고 실행하는 데 필요합니다. 문제는 이제 모든 개발자가 구성을 변경하고 OS 용 SWT 번들을 포함해야한다는 것입니다. 또한 모든 OS마다 다른 묶음이 필요합니다. 단 하나의 차이점은 항아리의 매니페스트에있는 라인이며 다른 번들은 실행해야합니다.

BND 또는 OSGi에서 현재 실행중인 시스템에 종속 된 빌드 또는 종속성을 설정할 수있는 트릭이 있습니까?

"org.eclipse.swt.win32.win32.x86_64"대신 "org.eclipse.swt. {OS}. {WS}. {ARCH}"와 (와) 비슷한가요? 또는 적어도 구성에서 특정 OS를 요구할 수 있습니까? 따라서 사용자가 잘못된 번들을 사용하면 ClassNotFound 예외 대신에 좋은 오류가 표시됩니까?

또 다른 질문 (http://stackoverflow.com/questions/2706222/create-cross-platform-java-swt-application/5784073#5784073)에 설명 된 해결책이 나에게 도움이되지 않습니다. 이것이 BND/OSGi로 어떻게 수행 될 수 있는지를 안다.

아이디어가 있으십니까?

답변

1

bnd 포함 할 수 있습니다. 표준 구성을 작성하고 플랫폼 특정 bndrun 파일에이를 포함하십시오.

bnd.bnd: 
# standard set that uses macros for the places where specials need to be insered 
-runbundles: \ 
     .... 
     ${platformdeps} 

windows.bndrun: 
-include bnd.bnd 
platformdeps = org.eclipse.swt.win.x86.jar 

어쨌든 bndtools를 살펴보십시오. Neil Bartlett는 PDE없이 bndtools를 빌드합니다. 따라서 그는 모든 플랫폼에 대해 파일을 버닝했습니다.

또한 $ {if ...} 매크로 또는 $ {replace} 매크로가 있습니다. 사람들이 불법 복제 된 버전을 다운로드하는 대신 책값을 지불한다면 ... 작은 문제가 해결 될 때까지 http://www.aqute.biz/Bnd/Bnd

0

Neil Bartlett의 저서 "OSGi in Practice"에는 운영 체제 종속 구성에 대해 언급하고있는 Fragment Bundles에 대한 섹션이 있습니다. (내가 실제로 그렇게 할 필요가 없었어요 그러나, 나는이 정말 당신이 찾고있는 무엇이든 말할 수 없습니다.)

책 : http://njbartlett.name/osgibook.html

(이건 정말 꽤 대답하지 않습니다 , 그러나 어쩌면 갈 수 있습니다.)

+0

팁 주셔서 감사합니다. 그러나 정말로 나를 도왔습니다. 내가 발견 한 것은 "이 경우 단편 P in은 런타임에 A의 내부 classpath에 병합됩니다." 그러나 내가 어떻게 이것을 이룰 수 있을지는 납득이 안된다. – attrib

관련 문제