Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OSGi:org.OSGi.framework.BundleExceptiom:无法解析[16](R 16.0)_Java_Osgi - Fatal编程技术网

Java OSGi:org.OSGi.framework.BundleExceptiom:无法解析[16](R 16.0)

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

我刚开始学习OSGi。 我写了HelloWorldbundle:

    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的方法。