Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi捆绑包的名称未知\u 0.0.0_Java_Maven_Osgi - Fatal编程技术网

Java OSGi捆绑包的名称未知\u 0.0.0

Java OSGi捆绑包的名称未知\u 0.0.0,java,maven,osgi,Java,Maven,Osgi,我已经通过ApacheFelixMaven捆绑插件创建了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

我已经通过ApacheFelixMaven捆绑插件创建了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()
时,不会引发异常。这是很奇怪的行为。。如何正确设置符号名


提前谢谢

您可以调用
Bundle.getSymbolicName


在示例代码中,您正在调用
Bundle.toString
。OSGi规范没有明确定义这个方法应该返回什么,但是我有点惊讶它返回“未知”。我通过删除
/tmp/org.eclipse.OSGi
文件夹(在GNU/Linux机器上)解决了这个问题。在这一步之后,我的包开始工作。

这是出乎意料的。我怀疑捆绑包没有真正正确安装。您是否绝对确定您的代码不会引发异常?你能用
try{..}catch(Throwable)
来包装它吗?有一件看起来很奇怪的事情是你把文件转换成URL的方式。仅在前面加上
文件:
是不安全的,如果文件路径是相对的,或者在Windows上运行,则会失败。您应该改用
f.toURI().toString()
。另外,当您报告捆绑包的位置时,您应该使用
b.getLocation()
。感谢您的建议。最后我用完全不同的方式解决了这个问题-看看我的解决方案。我不太清楚-你在这里是OSGi大师:-),但在提到的文件夹中,我发现了一些明显代表捆绑包的文件夹,可能我的捆绑包在重新部署时没有正确更新。