Java OSGi:org.OSGi.framework.BundleExceptiom:无法解析[16](R 16.0)
我刚开始学习OSGi。 我写了HelloWorldbundle:Java OSGi:org.OSGi.framework.BundleExceptiom:无法解析[16](R 16.0),java,osgi,Java,Osgi,我刚开始学习OSGi。 我写了HelloWorldbundle: public class HelloWorld { public interface SayHello { void greeting(); } public static class Greeting implements SayHello { @Override public void greeting(){ Sy
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) {
}
}
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捆绑:
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) {
}
}
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
将其上载到ApacheFelix(5.6.1版):
当我尝试启动activator时,我收到错误消息:
没有名为
HelloWorld
的包可供您的包导入。因此它无法解决。您有一个名为HelloWorld
的类,但是(1)我假设类在您的包中,(2)类不是包
您的清单不是OSGi捆绑包的有用清单<代码>主类对于OSGi框架来说毫无意义。您的bundle非常简单,只需导入包org.osgi.framework
包即可访问BundleActivator
和BundleContext
类型。而且,由于您有一个bundle activator,因此需要使用bundle activator
头指定类的完全限定名
我建议你去看看这个网站上的教程。事实上,如果你看他的第一个屏幕截图,有两个捆绑包。一个包含HelloWorld,另一个包含activator。不知道为什么会这样做。谢谢,我一定会检查那些教程。需要2个bundle,因为我希望一个bundle使用另一个bundle的方法。