我刚开始学习OSGi。 我写了 HelloWorld 包:
public class HelloWorld {
public interface SayHello
{
void greeting();
}
public static class Greeting implements SayHello {
@Override
public void greeting(){
System.out.println("Hello OSGi world!");
}
}
public static void main(String[] args) {
}
}
HelloWorldActivator 捆绑:
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class HelloWorldActivator implements BundleActivator {
public void start(BundleContext ctx){
ServiceReference ref = ctx.getServiceReference(HelloWorld.Greeting.class.getName());
((HelloWorld.Greeting)ctx.getService(ref)).greeting();
}
public void stop(BundleContext ctx){
System.out.println("HelloWorld bundle has been stoped");
}
}
HelloWorldActivator.mf:
main-class: HelloWorldActivator
bundle-name: HelloWorldActivator
import-package: HelloWorld
将其上传到Apache Felix(版本5.6.1): screen 当我试图启动激活器时,我收到错误消息: screen
答案 0 :(得分:1)
您的捆绑包中没有名为HelloWorld
的包导入。所以它无法解决。你有一个名为HelloWorld
的类但是(1)我假设类在你的包中,(2)一个类不是一个包。
您的清单不是OSGi包的有用清单。 Main-Class
对OSGi框架毫无意义。您的捆绑包非常简单,只需Import-Package
个org.osgi.framework
包即可访问BundleActivator
和BundleContext
类型。而且,由于您有一个bundle激活器,您需要使用Bundle-Activator
标头指定该类的完全限定名称。
我建议您查看OSGi enRoute网站以获取教程。