我正在迁移到bndtools一些我创建并在标准Eclipse环境中工作的osgi插件。我添加了Felix Web Console和Jetty HTTP Service,并将一些Equinox包替换为Felix等价包。
当我运行一个需要org.restlet.jar的特定包时,该包解析但不会激活。控制台输出为:
____________________________ 欢迎来到Apache Felix火星
g !2015-05-25 00:06:33.471:信息:oejs.Server: jetty - 7. - x.y -快照2015-05-25 00:06:33.545:信息:oejsh.ContextHandler:开始o.e.j.s.ServletContextHandler{零}/,2015-05-2500:06:33.620:信息:oejs.AbstractConnector:开始SelectChannelConnector@0.0.0.0:8080。启动bundle失败org.restlet-2.3.2。V20150501-1520,异常激活错误com/sun/net/httpserver/HttpHandler:org.restlet.engine.Engine: registerDefaultConnectors # 839
我尝试了基于其他问题的解决方案,即这个建议设置运行属性org.osgi.framework.system.packages.extra = com.sun.net.httpserver
(大概在我的bndtools .bnd文件中),另一个建议使用框架侦听器激活Restlet应用程序,但这些对我不起作用,控制台输出是相同的。
我仍在学习中,我将非常感谢任何帮助我找到解决方案,或者bndtools或Eclipse可能提供的任何方法或功能提示,以帮助我追踪到它的原因。
顺便说一下,Felix Web Console正在工作,作为这个插件的必需包。
这是我的bndtools配置:
Bundle-Version: 0.0.0.${tstamp}
Service-Component:
*
-runfw: org.apache.felix.framework;version='[4,5)'
-runee: JavaSE-1.7
-runsystemcapabilities: ${native_capability}
-resolve.effective: active;skip:="osgi.service"
-buildpath:
osgi.core,
osgi.cmpn,
biz.aQute.bnd.annotation,
org.apache.felix.log,
com.fiscio.api;version=latest,
osgi.enterprise,
org.restlet,
org.restlet.ext.json,
org.json
-runbundles:
com.fiscio.api;version=latest,
org.apache.felix.configadmin;version='[1.8.0,1.8.1)',
org.apache.felix.gogo.command;version='[0.14.0,0.14.1)',
org.apache.felix.gogo.runtime;version='[0.16.2,0.16.3)',
org.apache.felix.gogo.shell;version='[0.10.0,0.10.1)',
org.apache.felix.http.jetty;version='[2.2.2,2.2.3)',
org.apache.felix.log;version='[1.0.1,1.0.2)',
org.apache.felix.metatype;version='[1.0.10,1.0.11)',
org.apache.felix.scr;version='[1.8.2,1.8.3)',
org.apache.felix.webconsole;version='[4.2.2,4.2.3)',
org.json;version='[1.0.0,1.0.1)',
org.restlet;version='[2.3.2,2.3.3)',
org.restlet.ext.json;version='[2.3.2,2.3.3)',
osgi.cmpn;version='[5.0.0,5.0.1)',
osgi.enterprise;version='[4.2.0,4.2.1)'
-runrequires:
osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.shell)',
osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)',
osgi.identity;filter:='(osgi.identity=org.apache.felix.webconsole)',
osgi.identity;filter:='(osgi.identity=org.apache.felix.configadmin)',
osgi.identity;filter:='(osgi.identity=org.apache.felix.metatype)',
osgi.identity;filter:='(osgi.identity=org.apache.felix.log)',
osgi.identity;filter:='(&(osgi.identity=osgi.cmpn)(version>=4.2))',
osgi.identity;filter:='(&(osgi.identity=org.apache.felix.scr)(version>=1.6.0))',
osgi.identity;filter:='(osgi.identity=org.apache.felix.http.jetty)',
osgi.identity;filter:='(osgi.identity=com.fiscio.api)',
osgi.identity;filter:='(osgi.identity=org.json)',
osgi.identity;filter:='(osgi.identity=org.restlet.ext.json)',
osgi.identity;filter:='(osgi.identity=org.restlet)'
## Uncomment if you need to change the HTTP port
-runproperties: org.osgi.framework.system.packages.extra = com.sun.net.httpserver
Private-Package:
com.fiscio.rest,
com.fiscio.rest.resources
事实证明,在stackoverflow.com上给出的其他答案都是正确的,除了那个设置-runproperties: org.osgi.framework.system.packages.extra = com.sun.net.httpserver
在bndtools启动配置中没有达到期望的结果。bndtools FAQ建议如下,这解决了我的问题:
注意,使用-runsystempackages指令相当于设置OSGi属性但是,最好使用-runsystempackages,因为这样可以运行Bndtools中的需求解析器将考虑解析过程中这些包的可用性。