以编程方式启动OSGi(Equinox)?

我想能够轻松地启动一个OSGi框架(最好是Equinox),并加载从我的POM中列出的任何包从一个Java主。

这可能吗? 如果是这样,怎么样?

看来像pax工具会这样做,但我似乎无法find任何文件指出这样的。 我知道我可以像这样开始Equinox:

BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null ); 

但我想做更多 – 就像我说的:加载更多的包,也许开始一些服务等。

任何OSGi框架(R4.1或更高版本)都可以使用FrameworkFactory API以编程方式启动:

 ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class); FrameworkFactory ff = ffs.iterator().next(); Map<String,Object> config = new HashMap<String,Object>(); // add some params to config ... Framework fwk = ff.newFramework(config); fwk.start(); 

OSGi框架现在正在运行。 由于Framework扩展了Bundle ,所以可以调用getBundleContext并调用所有正常的API方法来操作bundle,注册服务等。

 BundleContext bc = fwk.getBundleContext(); bc.installBundle("file:/path/to/bundle.jar"); bc.registerService(MyService.class.getName(), new MyServiceImpl(), null); // ... 

最后你应该等待框架closures:

 fwk.stop(); fwk.waitForStop(0); 

重申一下,这种方法适用于包括Equinox和Felix在内的任何 OSGi框架,只需将框架JAR放在类path上即可。

这个线程可能有点陈旧,但无论如何…

Pax对maven url的支持非常好,甚至还有一个wrap url处理程序,允许你dynamic地将non-osgi jar转换为nice tidy bundle。

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

  <dependency> <groupId>org.ops4j.pax.url</groupId> <artifactId>pax-url-wrap</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.ops4j.pax.url</groupId> <artifactId>pax-url-mvn</artifactId> <version>1.2.5</version> </dependency> 

命令将是:

 install -s mvn:groupId:artifactId:version:classifier 

注意:鸡蛋情况 – 您必须先使用file:url处理程序安装这些文件,或者将它们放到autodeploy目录中。

卡拉夫这一切都build立在它的发行版,所以也许看看卡拉夫发射源?

第二个注意事项:通过将@snapshots附加到repo URL来启用部署快照,通过ConfigAdminpipe理configuration

在pipe理你所有的POM定义的依赖关系看看Karaf的function – 有一个插件,可以生成一个function的XML文件,然后可以用来部署你的整个应用程序: http : //karaf.apache.org/manual /2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

此外,这个XML工件可以部署到您的OBR,所以你可以采取香草Felix / Equinox / Karaf设置,添加mvn url处理程序,并configuration您公司的mvn回购,然后提供整个应用程序=)

编辑:意识到你想从Java内部开始。 因为读书不够近而感到羞耻

看看这个链接。 http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

实质上

 public static void main(String args[]) throws Exception { String[] equinoxArgs = {"-console","1234","-noExit"}; BundleContext context = EclipseStarter.startup(equinoxArgs,null); Bundle bundle = context.installBundle( "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar"); bundle.start(); } 

编辑:Maven

看来, https: //groups.google.com/group/spring-osgi/web/maven-url-handler?pli =1包含一个OSGi URl处理程序服务,可以采取以下格式的URLS并从它们加载捆绑( mvn:// repo / bundle_path)