Java 为什么在使用ApacheFelixGogo启动我的最小示例包时会出现BundleException?

Java 为什么在使用ApacheFelixGogo启动我的最小示例包时会出现BundleException?,java,osgi,apache-felix,osgi-bundle,Java,Osgi,Apache Felix,Osgi Bundle,我正在尝试从下到上学习OSGI。从制作和运行一个应用程序开始 我使用maven和ApacheFelix网站上先前链接的示例建立了一个简单的项目。这个最小的项目似乎编译得很好,在检查生成的.jar文件的内容时,我看不出有任何问题 然后,我使用felix:install在ApacheFelix的GogoOSGi终端工具中安装生成的bundled.jar文件。之后,我尝试使用felix:start启动它 这就是我的问题发生的时候。我得到了org.osgi.framework.BundleExcepti

我正在尝试从下到上学习OSGI。从制作和运行一个应用程序开始

我使用maven和ApacheFelix网站上先前链接的示例建立了一个简单的项目。这个最小的项目似乎编译得很好,在检查生成的.jar文件的内容时,我看不出有任何问题

然后,我使用
felix:install
在ApacheFelix的GogoOSGi终端工具中安装生成的bundled.jar文件。之后,我尝试使用
felix:start
启动它

这就是我的问题发生的时候。我得到了org.osgi.framework.BundleException的堆栈跟踪

这就是我试图解决的问题。我看不到任何明显的问题或解决方案可以帮助或解释我为什么会遇到这个问题

我还使用ApacheFelix框架版本6.0.3来运行我的包

所以,我的问题是:为什么我会遇到这些问题,我能做些什么来解决它们,以便我能回到学习OSGI的轨道上

我一直在搜索伟大的互联网,寻找它考虑所有技术问题的无限智慧,但找不到任何人在同样的情况下有同样的问题

关于进一步的信息,我正在使用Java12和内置于IntellijIDEA社区版的Maven。我在同样的设置中使用Java8时也遇到了同样的问题,并且升级到了12,只是因为这样做感觉很明智

OSGI Activator类是目前为止本项目中唯一的代码,如下所示:

package com.github.hannesknutsson.privatepkg;
导入org.osgi.framework.BundleActivator;
导入org.osgi.framework.BundleContext;
导入org.osgi.framework.ServiceEvent;
导入org.osgi.framework.ServiceListener;
公共类激活器实现BundleActivator、ServiceListener{
私密文本语境;
public void start(BundleContext BundleContext)引发异常{
上下文=文本;
System.out.println(“开始监听服务事件”);
addServiceListener(这个);
}
公共无效停止(BundleContext BundleContext)引发异常{
System.out.println(“停止侦听服务事件”);
}
公共作废服务已更改(ServiceEvent ServiceEvent){
字符串[]对象类=(字符串[])
serviceEvent.getServiceReference().getProperty(“对象类”);
if(serviceEvent.getType()==serviceEvent.REGISTERED)
{
System.out.println(
“Ex1:类型为“+objectClass[0]+”的服务已注册。”);
}
else if(serviceEvent.getType()==serviceEvent.Unregisting)
{
System.out.println(
“Ex1:类型为“+objectClass[0]+”未注册“)的服务;
}
else if(serviceEvent.getType()==serviceEvent.MODIFIED)
{
System.out.println(
“Ex1:类型为“+objectClass[0]+”的服务已修改。”);
}
}
}
用于编译结果并将其打包到bundle.jar文件中的Maven pom.xml如下所示:


测试项目
com.github.hannesknutsson
1.0-快照
4.0.0
捆
测试包
org.apache.maven.plugins
maven jar插件
3.1.1
org.apache.felix
maven捆绑插件
4.2.0
org.apache.maven.plugins
maven编译器插件
3.8.1
maven jar插件
${project.build.outputDirectory}/META-INF/MANIFEST.MF
3.1.1
org.apache.felix
maven捆绑插件
真的
${project.groupId}.services
${project.groupId}.privatepkg
${project.groupId}.privatepkg.Activator
4.2.0
org.apache.maven.plugins
maven编译器插件
12
12
3.8.1
由此产生的stacktrace如下所示:

org.osgi.framework.BundleException:无法缓存bundle:TestBundle-1.0-SNAPSHOT.jar
位于org.apache.felix.framework.felix.installBundle(felix.java:3231)
位于org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:147)
位于org.apache.felix.framework.BundleContextImpl.installBundle(BundleContextImpl.java:120)
位于org.apache.felix.gogo.command.Basic.start(Basic.java:734)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:567)
位于org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:139)
位于org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:91)
位于org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:599)
位于org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:526)
位于org.apache.felix.gogo.runtime.Closure.execute(Closure.java:415)
位于org.apache.felix.gogo.runtime.Pipe.doCall(Pipe.java:416)
位于org.apache.felix.gogo.runtime.Pipe.call(Pipe.java:229)
位于org.apache.felix.gogo.runtime.Pipe.call(Pipe.java:59)