我正在使用BndTools (http://bndtools.org/)来开发OSGI应用程序。一切都很好,但我有一些东西,我想改变,同时导出我的应用。
我正在努力实现两件事(我认为它们可能是相关的):
1:将默认的BndTools启动程序(aQute.launcher)替换为自定义的启动程序(或以.JAR格式设置)
如何将默认的BndTools启动程序(aQute.launcher)删除或更改为自定义启动程序?
我在这个话题上唯一能找到的就是:http://goo.gl/jYliih
发射器没有内置到bnd中,实际的发射策略是参数化的。通过在
-runpath上放置JAR,启动程序与bnd或bndrun文件相关联。一个.JAR应该有一个启动插件头作为一个启动程序.如果在-runpath上没有找到启动程序,那么将使用内置的biz.aQute.launcher。
原因是我需要我的应用程序来接受命令args,而不是干扰aQute启动程序(就像所有-run args一样)。另一方面,我想摆脱启动应用程序的批处理.bat/.sh方法,并使用单个.jar文件启动应用程序。
这有可能吗?
2:自定义导出的文件结构
默认情况下,BndTools在导出应用程序时创建此文件结构:
jar/ -> --这是OSGI包文件夹
aQute/ ->默认BndTools启动程序(Launcher.class The )
META-INF/ ->为什么这里有一个META文件夹?不是罐子
launcher.properties ->发射器属性
start.sh -->从这个批处理文件中释放Launcher.class。
start.bat /与JAR相比,这有什么好处?
基本上,我希望删除aQute、META-INF和start.*文件,并为二进制文件添加一个bin文件夹。
这应该可以通过一个"Ant“、"Maven”或"Gridle“脚本来实现。但是我可以创建一个没有BndTools支持的"BndTools项目“或”分级项目“。我安装了"BndTools Gradle插件“,但是在任何地方都找不到关于这个主题的任何有用文档。
希望有人能帮我,或者为我指明正确的方向。欢迎光临。
发布于 2016-02-29 10:06:57
(这个问题也出现在bndtools组列表中)
我有点困惑,因为你的愿望似乎得到了满足。您可以将bndrun文件导出到单个可执行JAR。在bndtools程序中,您可以通过获取对象服务和“launcher.arguments”服务属性来访问命令行参数。这是最初的String[]给出的主要方法的发射器。
@Reference(target=“(launcher.arguments=*)”)
void setArgs( Map<String,Object> args ) {
… = (String[]) args.get( “launcher.arguments”;
}导出的JAR是一个可执行的JAR。JPM可以轻松地将其转换为本地可执行文件。
jpm install -n mycode mycode.jar您可以从https://github.com/bndtools/jpmcli安装jpm。
罗伯特:谢谢,参数代码片段正是我所需要的。
关于文件夹结构:
我需要我的包才能更新。如果我将所有的包嵌入到.Jar中,那么就不可能更新它们。我只需要打包发射器,同时把包放在外面。
BndTools有两个导出选项。在这里,您可以嵌入整个发射器和所有捆绑在一个罐子内。或者选项2是让包位于lib目录中,并通过shell脚本(start.bat、start.sh)启动它们。我在寻找一个没有壳脚本的解决方案。
Peter:,即使包在里面,只要不清除框架的存储区域,仍然可以更新它们。例如,您可以轻松地包含File,并从一个目录加载包,或者使用另一个管理代理Apache。
在我看来,当前的JAR导出(实际上我非常不喜欢目录导出,它很混乱)是尽可能好的。它有一个非常好的版本模型,只是一个文件,易于版本和更新。使用JPM,您可以在任何系统上安装它。
所以如果你想要别的东西,你必须创建你自己的出口商…
https://stackoverflow.com/questions/35588905
复制相似问题