2014-12-01 5 views
0

나는 웹에서 내가 설명하려고하는 내용에 대한 좋은 자습서 링크를 검색했지만 아직 찾지 못했습니다. 제 희망은 여기있는 누군가가 이미 그것을 발견하고 그것을 여기에 링크를 게시 할 수있는 아이디어가 있다는 것입니다.OSGi를 사용하여 moddable 응용 프로그램 만들기

OSGi/Equinox를 사용하여 나중에 알 수없는 컨텐츠에 라이브러리를 추가 할 수있는 응용 프로그램 (게임, 비즈니스 또는 기타)을 빌드하는 방법을 알고 싶습니다.

이 아이디어는 Minecraft Forge를 처음 사용했을 때부터 나를 매료 시켰고, 클래스 패스 또는 뭔가로 식별 된 mods 디렉토리에 JAR 파일을 드롭해야했습니다.

먼저 .NET에서 주제를 연구하고 "System.AddIn"및 "System.AddIn.Contract"라이브러리에서 적절한 응답을 발견했습니다. 여기 좋은 지침서가 있습니다 : MSDN - Creating an Extensible Application. 이것은 꽤 잘 작동했습니다. AddIns 유형을 정의하는 인터페이스와 계약의 파이프 라인을 만든 다음 클래스 라이브러리를 올바른 디렉토리에 놓기 만하면 나중에 AddIns를 추가 할 수 있습니다.

저는 Java에서 이와 동일한 작업을 수행하는 방법을 현재 조사하고 있으며 현재 OSGi 플러그인을보고 있습니다. 그러나 지금까지 필자가 경험 한 모든 예제는 디자인 타임에 알려진 번들에 초점을 맞추 었습니다. 게다가, "DynamicImport-Package"에 대한 대화가 있습니다 만, 지금까지 본 자원에 대해서는이 부분을 싫어합니다.

그래서 특정 인터페이스를 충족하는 알 수없는 번들 (클래스 라이브러리)을 동적으로 검색하고로드하기 위해 "미소 지르는"방법을 설명하는 리소스에 대해 알고있는 사람이 있습니까?

답변

1

OSGi 서비스를 찾고 있습니다. OSGi에서는 서비스를 하나의 번들에 등록하고 다른 번들에서 서비스를 사용할 수 있습니다. 또한 OSGi 컨테이너에 나타나는 서비스를 추적하여 필요에 따라 사용할 수 있습니다.

OSGi 서비스를 사용하는 방법을 설명하는 NET의 많은 자습서가 있습니다. 예를 들면 : http://www.knopflerfish.org/osgi_service_tutorial.html

당신이 그것을 사용할 수있는 방법 예 :

  • 당신은 인터페이스를 지정
  • 각 플러그인 번들은 인터페이스의 구현이 있어야하며 번들은은 OSGi로 인스턴스화 된 객체를 등록 서비스.
  • 기술 번들 (플러그인을 가질 수 있음)은 인터페이스를 구현하는 모든 OSGi 서비스를 추적합니다.
+0

좋아요! 내가 게시 한 기사를 살펴 보겠습니다. 앞으로 24 시간 내에 확실한 답변을 드릴 수 있어야합니다. – MrGoodfix

+0

좋은 결과 주셔서 감사합니다! 소매를 감을 시간. – MrGoodfix

+0

필자는이 사실을 알고 나서이 링크를 추가하고자했습니다. http://docs.oracle.com/javase/tutorial/ext/basics/spi.html – MrGoodfix

0

OSGi 프레임 워크를 응용 프로그램에 임베드 한 다음로드 할 OSGi 번들 플러그인 라이브러리를 동적으로로드하기 위해 살펴볼 주요 OSGi API는 org.osgi.framework.launch.Framework입니다. 이 콘텍스트에서 내 https://github.com/vorburger/ch.vorburger.minecraft.osgi/ 프로젝트의 소스 코드를 파고들 수 있습니다. 아파치 펠릭스 OSGi 프레임 워크를 Minecraft Sponge 모드에 임베드하고 추가로 Minecraft 모드를 OSGi 번들로 동적으로로드합니다. ;-) 특별히 OSGiFrameworkWrapper 클래스를 살펴보십시오. 당신은 또한 OSGi없이 이것을 직접 할 수도 있고 java.lang.ClassLoader를 직접 사용해 보거나 내 https://github.com/vorburger/HoTea 프로젝트를 사용할 수도 있습니다.

관련 문제