我已经通过Apache Felix Maven Bundle Plugin创建了OSGi包。输出jar文件似乎很好,MANIFEST.MF如下:
Manifest-Version: 1.0
Export-Package: cz.bach.entities.ui.extensions;uses:="org.osgi.framewo
rk,cz.bach.entities.ui.extensions.output,org.slf4j,cz.bach.dataframe2
.domain,com.vaadin.ui,cz.bach.entities.ui.commons,cz.bach.entities.ui
.actions,com.vaadin.server,org.springframework.beans.factory.annotati
on,cz.bach.entities.ui.lang,cz.bach.entities.ui.output,org.aspectj.la
ng,org.springframework.transaction.aspectj,org.aspectj.lang.reflect,o
rg.springframework.transaction.annotation,org.aspectj.runtime.reflect
,org.springframework.beans.factory.aspectj,org.springframework.beans,
org.springframework.context,org.springframework.beans.factory.config,
com.vaadin.event,org.apache.log4j,org.osgi.framework.launch"
Ignore-Package: cz.bach.entities.ui.extensions
Bundle-ActivationPolicy: lazy
Built-By: firzen
Tool: Bnd-0.0.357
Bundle-Name: extensions
Created-By: Apache Maven Bundle Plugin
Build-Jdk: 1.6.0_45
Bundle-Version: 0.0.1.SNAPSHOT
Bnd-LastModified: 1446557486350
Bundle-Activator: cz.bach.entities.ui.extensions.Activator
Bundle-ManifestVersion: 2
Bundle-SymbolicName: isai-extensions
Import-Package: com.vaadin.event;resolution:=optional;version="7.5",co
m.vaadin.server;resolution:=optional;version="7.5",com.vaadin.ui;reso
lution:=optional;version="7.5",cz.bach.dataframe2.domain;resolution:=
optional,cz.bach.entities.ui.actions;resolution:=optional,cz.bach.ent
ities.ui.commons;resolution:=optional,cz.bach.entities.ui.extensions.
output;resolution:=optional,cz.bach.entities.ui.lang;resolution:=opti
onal,cz.bach.entities.ui.output;resolution:=optional,org.apache.log4j
;resolution:=optional,org.aspectj.lang;resolution:=optional,org.aspec
tj.lang.reflect;resolution:=optional,org.aspectj.runtime.reflect;reso
lution:=optional,org.osgi.framework;resolution:=optional;version="1.3
",org.osgi.framework.launch;resolution:=optional;version="1.1",org.sl
f4j;resolution:=optional;version="1.7",org.springframework.beans;reso
lution:=optional;version="3.1",org.springframework.beans.factory.anno
tation;resolution:=optional;version="3.1",org.springframework.beans.f
actory.aspectj;resolution:=optional;version="3.1",org.springframework
.beans.factory.config;resolution:=optional;version="3.1",org.springfr
amework.context;resolution:=optional;version="3.1",org.springframewor
k.transaction.annotation;resolution:=optional;version="3.1",org.sprin
gframework.transaction.aspectj;resolution:=optional;version="3.1"
但是当我在我的项目中通过此代码加载此jar文件时..
public void installPackage(File f) throws BundleException {
Bundle b = ctx.installBundle("file:" + f.getPath());
System.out.println("starting bundle: " + b + ", location: " + f.getPath());
b.start();
}
..输出为:
starting bundle: unknown_0.0.0 [3], location: /tmp/isai-extensions.jar
这意味着bundle的符号名称是null
,尽管事实上它是在MANIFEST.MF中通过行:Bundle-SymbolicName: isai-extensions
指定的。此外,当我调用b.start()
时,不会抛出任何异常。这是很奇怪的行为..我怎样才能正确设置符号名称?
提前致谢!
答案 0 :(得分:0)
您可以拨打Bundle.getSymbolicName
。
在您的示例代码中,您正在调用Bundle.toString
。 OSGi规范没有确切地定义这个方法应该返回什么,但我有点惊讶它返回“未知”。
答案 1 :(得分:0)
我通过删除/tmp/org.eclipse.osgi
文件夹(在GNU / Linux机器上)解决了这个问题。在那一步之后,我的捆绑开始工作。