Java 如何替换BndTools默认启动器并更改导出文件结构
我正在使用BndTools()开发一个OSGI应用程序。一切正常,但在导出应用程序时,我想更改一些内容 我正在努力实现两件事(我认为它们可能是相关的): 1:将默认的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
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