Java 如何替换BndTools默认启动器并更改导出文件结构

Java 如何替换BndTools默认启动器并更改导出文件结构,java,osgi,osgi-bundle,bnd,bndtools,Java,Osgi,Osgi Bundle,Bnd,Bndtools,我正在使用BndTools()开发一个OSGI应用程序。一切正常,但在导出应用程序时,我想更改一些内容 我正在努力实现两件事(我认为它们可能是相关的): 1:将默认的BndTools启动器(aquet.launcher)替换为自定义的(或以.JAR格式) 如何将默认的BndTools启动程序(aquet.launcher)删除或更改为自定义启动程序 关于这个话题,我唯一能找到的是: 发射器没有内置到bnd中,实际的发射策略是参数化的。通过在-runpath上放置JAR,启动器与bnd或bndru

我正在使用BndTools()开发一个OSGI应用程序。一切正常,但在导出应用程序时,我想更改一些内容

我正在努力实现两件事(我认为它们可能是相关的):

1:将默认的BndTools启动器(
aquet.launcher
)替换为自定义的(或以
.JAR
格式) 如何将默认的BndTools启动程序(aquet.launcher)删除或更改为自定义启动程序

关于这个话题,我唯一能找到的是:

发射器没有内置到bnd中,实际的发射策略是参数化的。通过在
-runpath
上放置JAR,启动器与bnd或bndrun文件关联。
.JAR
应该有一个启动器插件头作为启动器。如果在
-runpath
上找不到启动器,则将使用内置的
biz.aquet.launcher

原因是我需要我的应用程序接受命令args,而不干扰aquete启动器的args(就像所有运行args一样)。另一方面,我想摆脱批量
.bat/.sh
启动应用程序的方法,使用单个
.jar
文件来启动应用程序

可能吗

2:自定义导出的文件结构 默认情况下,BndTools在导出应用程序时创建此文件结构:

jar/
->这是OSGI jar bundles文件夹

aquete/
->默认的BndTools启动器(内部为Launcher.class)

META-INF/
->为什么这里有META-INF文件夹?这不是一个罐子

launcher.properties
->launcher属性

start.sh
-->从此批处理文件启动Launcher.class

start.bat
/与JAR相比,这有什么好处

基本上,我想删除
aquete
META-INF
start.*
文件,并为二进制文件添加一个
bin
文件夹

这应该可以通过“Ant”、“Maven”或“Gridle”脚本实现。但我可以创建一个“BndTools项目”或“Gradle项目”,而不需要BndTools支持。我安装了“BndTools-Gradle插件”,但是我在任何地方都找不到关于这个主题的有用文档

希望有人能帮我,或者给我指出正确的方向。 问候。

(此问题也在bndtools组列表中提出)

我有点困惑,因为你的愿望似乎得到了满足。您可以将bndrun文件导出到单个可执行JAR。在bndtools程序中,您可以通过获取对象服务和“launcher.arguments”服务属性来访问命令行参数。这是原始字符串[],提供给启动器的main方法

@Reference(target=“(launcher.arguments=*)”)
void setArgs( Map<String,Object> args ) {
    … = (String[]) args.get( “launcher.arguments”;
}
您可以从安装jpm

罗伯特: 谢谢Peter,launcher参数代码片段正是我所需要的

关于文件夹结构:

我需要我的包是可更新的。如果我将所有包都嵌入到.Jar中,那么就不可能更新它们。我只需要在把包放在外面的时候把发射器打包

BndTools有两个导出选项。1,您可以将整个启动器和所有捆绑包嵌入一个JAR中。或者,选项2是将bundle放在lib目录中,并通过shell脚本(start.bat、start.sh)启动它们。 我正在寻找一个无shell脚本的解决方案

彼得: 即使捆绑包在内部,只要不清除框架的存储区域,您仍然可以更新它们。例如,您可以轻松地包括文件安装和从目录加载捆绑包,或者使用另一个管理代理apacheace

从我的角度来看,当前的JAR导出(实际上我非常不喜欢目录导出,它很混乱)是最好的。它有一个非常好的发布模型,只有一个易于版本和更新的文件。使用JPM,您可以在任何系统上安装它


因此,如果您想要其他产品,您必须创建自己的出口商……

您是否考虑过在邮件列表中询问?
jpm install -n mycode mycode.jar