从OSGi包访问命令行参数

Thi*_*ilo 7 java command-line osgi apache-felix

我有一个作为OSGi包集合运行的应用程序.我使用嵌入Felix框架的非常小的包装器启动它.这个包装器的必要性让我感到烦恼,因为它依赖于Felix(而应用程序本身也可以在Equinox中运行得很好),所以我想摆脱它,并使用默认的Felix发射器.

包装器唯一真正做的就是将命令行参数传递给已启动的OSGi框架,以便可以对它们做出反应.请注意,它实际上并不解析参数,只是将String []推送到我的应用程序中.

是否有标准方式(或至少是Felix标准方式)从捆绑中访问命令行参数,以便我可以取消自定义启动器?

Pet*_*ens 7

如果你使用bnd(工具),你可以使用它的启动器.它将命令行参数注册为服务属性"launcher.arguments".

将它与bnd package命令结合使用时,这非常有效.此命令采用bnd项目或bndrun文件描述运行环境(包,属性,框架)并转换为独立的主jar.所以你在bndtools中进行开发和调试,当你开心的时候把它变成一个可执行的jar.例:

@Component
public class MyApp {
   String args;

   @Activate
   void activate() { 
      System.out.println("Args: " + args);
   }

   @Reference(target="(launcher.arguments=*)")
   void args( Object object, Map<String,Object> map) {
       args = (String) map.get("launcher.arguments");
   }
}

# to turn into an executable
bnd package myapp.bnd
java -jar myapp.jar -a somearg *.file
Run Code Online (Sandbox Code Playgroud)


jas*_*cao 1

可能不会。我认为标准 Felix 启动器会进行一些命令行验证,并且只接受捆绑包缓存目录作为参数。不止一个争论,启动器就会退出。

您可以使用系统属性在命令行中传递信息,我认为它不仅适用于 felix,也适用于其他 osgi 容器,但它可能会使您的应用程序不太用户友好。