找不到OSGI Activator类

时间:2017-11-09 14:19:52

标签: java osgi apache-felix

我正在尝试制作最简单的OSGI示例,以查看它是否适用于特定的Java虚拟机。目前我正在使用Open JDK 1.8.0进行测试。

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

所以基本上清单看起来像那样:

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

我运行Apache Felix,我安装了.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)

有什么问题?

谢天谢地。

2 个答案:

答案 0 :(得分:2)

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

你似乎手工创造了Manifest。这是一个非常容易出错的过程。我建议使用maven构建并使用maven-bundle-plugin或bnd-maven-plugin来生成Manifest。这样更安全。

您可以查看into a tutorial I did some time ago。也许你需要根据你的情况将其剥离,但你会看到maven的构建。

首次尝试使用Activator是一个好主意..但是您应该快速切换到依赖注入框架。对于OSGi,我建议查看声明性服务。

答案 1 :(得分:0)

我认为Activator-class不应该在build-folder中。删除构建文件夹。