以编程方式启动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)