Thi*_*ilo 7 java command-line osgi apache-felix
我有一个作为OSGi包集合运行的应用程序.我使用嵌入Felix框架的非常小的包装器启动它.这个包装器的必要性让我感到烦恼,因为它依赖于Felix(而应用程序本身也可以在Equinox中运行得很好),所以我想摆脱它,并使用默认的Felix发射器.
包装器唯一真正做的就是将命令行参数传递给已启动的OSGi框架,以便可以对它们做出反应.请注意,它实际上并不解析参数,只是将String []推送到我的应用程序中.
是否有标准方式(或至少是Felix标准方式)从捆绑中访问命令行参数,以便我可以取消自定义启动器?
如果你使用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)
可能不会。我认为标准 Felix 启动器会进行一些命令行验证,并且只接受捆绑包缓存目录作为参数。不止一个争论,启动器就会退出。
您可以使用系统属性在命令行中传递信息,我认为它不仅适用于 felix,也适用于其他 osgi 容器,但它可能会使您的应用程序不太用户友好。
| 归档时间: |
|
| 查看次数: |
5254 次 |
| 最近记录: |