Java 找不到OSGI激活器类

Java 找不到OSGI激活器类,java,osgi,apache-felix,Java,Osgi,Apache Felix,我试图制作一个最简单的OSGI示例,以查看它是否在特定的Java虚拟机上工作。目前我正在用OpenJDK1.8.0测试它 我正在学习教程。我有完全相同的文件,只是我从.java文件和清单中删除了package语句(我只是想让它更简单) 所以基本上清单看起来是这样的: Bundle-Name: Service listener example Bundle-Description: A bundle that displays messages at startup and when servic

我试图制作一个最简单的OSGI示例,以查看它是否在特定的Java虚拟机上工作。目前我正在用OpenJDK1.8.0测试它

我正在学习教程。我有完全相同的文件,只是我从.java文件和清单中删除了package语句(我只是想让它更简单)

所以基本上清单看起来是这样的:

Bundle-Name: Service listener example
Bundle-Description: A bundle that displays messages at startup and when service events occur
Bundle-Vendor: Apache Felix
Bundle-Version: 1.0.0
Bundle-Activator: Activator
Import-Package: org.osgi.framework
我能够生成jar文件。其内容如下:

" zip.vim version v27
" Browsing zipfile /home/cosmin/OSGI_Testing/osgi/test.jar
" Select a file with cursor and press ENTER

META-INF/
META-INF/MANIFEST.MF
build/Activator.class
我运行ApacheFelix,安装.jar文件,启动时抛出该异常:

ERROR: Bundle [1] Error starting file:/home/cosmin/OSGI_Testing/osgi/. /test.jar (org.osgi.framework.BundleException: Not found: Activator)
java.lang.ClassNotFoundException: Activator not found by [1]
  at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1610)
  at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
  at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2018)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1404)
  at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4505)
  at org.apache.felix.framework.Felix.activateBundle(Felix.java:2220)
  at org.apache.felix.framework.Felix.startBundle(Felix.java:2145)
  at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1372)
  at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
有什么问题


非常感谢。

我认为Activator类不应该在build文件夹中。删除生成文件夹。

我认为Activator类不应位于生成文件夹中。删除生成文件夹。

此操作中存在几个问题。Activator类位于错误的文件夹中。。。但这已经提到了。除此之外,您应该始终在OSGi中使用包名。尤其是以后当您想要共享包时,您必须确保同一个包不会在多个jar中使用

您似乎是手工创建清单的。这是一个非常容易出错的过程。我建议使用maven构建并使用maven bundle插件或bnd maven插件生成清单。这样更安全

你可以看看。也许你需要在你的案例中去掉它,但是你会看到maven的构建


第一次尝试使用激活剂是个好主意。。但是您应该快速切换到依赖注入框架。对于OSGi,我建议研究声明性服务

这方面有几个问题。Activator类位于错误的文件夹中。。。但这已经提到了。除此之外,您应该始终在OSGi中使用包名。尤其是以后当您想要共享包时,您必须确保同一个包不会在多个jar中使用

您似乎是手工创建清单的。这是一个非常容易出错的过程。我建议使用maven构建并使用maven bundle插件或bnd maven插件生成清单。这样更安全

你可以看看。也许你需要在你的案例中去掉它,但是你会看到maven的构建


第一次尝试使用激活剂是个好主意。。但是您应该快速切换到依赖注入框架。对于OSGi,我建议研究声明性服务

不能将默认包与OSGi一起使用。不能将默认包与OSGi一起使用。