Java 从主类启动osgi bundle,而不是实现BundleActivator

Java 从主类启动osgi bundle,而不是实现BundleActivator,java,bundle,fuseesb,jbossfuse,Java,Bundle,Fuseesb,Jbossfuse,我有一个名为floodlight.jar的jar文件。我可以在cmd行中运行它:java-jarfloodlight.jar。现在,我想将其转换为一个捆绑包,以便使用FUSE ESB容器进行部署。以下是我迄今为止所做的: 转换: java -jar bnd.jar wrap floodlight.jar 生成名为泛光灯.bar的捆绑包。将名称更改为floodlight.jar 部署 FuseESB:karaf@root> osgi:install -s file:/home/usr/D

我有一个名为floodlight.jar的jar文件。我可以在cmd行中运行它:java-jarfloodlight.jar。现在,我想将其转换为一个捆绑包,以便使用FUSE ESB容器进行部署。以下是我迄今为止所做的:

  • 转换:

     java -jar bnd.jar wrap floodlight.jar
    
    生成名为泛光灯.bar的捆绑包。将名称更改为floodlight.jar

  • 部署

    FuseESB:karaf@root> osgi:install -s file:/home/usr/Dir/to/floodlight.jar
    
  • 我希望这个捆绑包能够像我在cmd行中做的一样:java-jar floodlight.jar,一旦它开始使用。但是,它是活动的,不做任何事情。它的行为就像一个图书馆


    我想知道一旦主类启动,如何让bundle运行它。有人能帮我吗?

    OSGi应用程序的入口点是BundleActivator。不能像在标准Java应用程序中那样调用main方法。但是,您可以在bundle的start(BundleContext)方法的main方法中执行所有操作


    因此,实现BundleActivator接口并将其添加到清单中。

    为什么要避免编写
    Bundle Activator
    ?如果是关于代码的复制,那么您可以从activator的
    start()
    方法调用
    main()
    。因为有些java应用程序,如泛光灯、oracle noslqlDB,已经准备好运行了。我只想将这些应用程序部署到OSGi容器中而不做太多更改。这是否就像将内容从主类处理到BundleActivator.start()一样?然后将激活器添加到清单中?根据您的程序,您可能需要稍微更改一下。但总的来说,是的,start()是OSGi的主要()!但是请记住,由于osgi的扩展类加载,将“标准”程序转换为模块化osgi应用程序可能会导致一些问题