OSGi: org.osgi.framework.BundleExceptiom: 无法解析 [16](R 16.0)
OSGi: org.osgi.framework.BundleExceptiom: Unable to resolve [16](R 16.0)
我刚开始学习 OSGi。
我写了 HelloWorld bundle:
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
没有名为 HelloWorld
的包供您导入。所以无法解决。您有一个名为 HelloWorld
的 class,但 (1) 我假设 class 在您的包中,并且 (2) class 不是一个包。
您的清单不是 OSGi 包的有用清单。 Main-Class
对 OSGi 框架没有意义。您的包非常简单,只需要 Import-Package
org.osgi.framework
包就可以访问 BundleActivator
和 BundleContext
类型。而且,由于您有捆绑激活器,因此需要使用 Bundle-Activator
header.
指定 class 的完全限定名称
我建议查看 OSGi enRoute 网站的教程。
我刚开始学习 OSGi。 我写了 HelloWorld bundle:
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
没有名为 HelloWorld
的包供您导入。所以无法解决。您有一个名为 HelloWorld
的 class,但 (1) 我假设 class 在您的包中,并且 (2) class 不是一个包。
您的清单不是 OSGi 包的有用清单。 Main-Class
对 OSGi 框架没有意义。您的包非常简单,只需要 Import-Package
org.osgi.framework
包就可以访问 BundleActivator
和 BundleContext
类型。而且,由于您有捆绑激活器,因此需要使用 Bundle-Activator
header.
我建议查看 OSGi enRoute 网站的教程。