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

前端之家收集整理的这篇文章主要介绍了如何替换BndTools默认启动器并更改导出文件结构前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用BndTools(http://bndtools.org/)来开发OSGI应用程序.一切都很好,但我想在导出我的应用程序时想要改变一些东西.

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

1:用自定义的BndTools启动器(aQute.launcher)替换默认的BndTools启动器(或者以.JAR格式)

如何摆脱或更改默认的BndTools启动器(aQute.launcher)到自定义的启动器?

我在这个主题上唯一能找到的就是:http://goo.gl/jYliih

Launchers are not build into bnd,the actual launching strategy is parameterized. A launcher is associated with a bnd or bndrun file by placing a JAR on the -runpath. A .JAR should have a Launcher-Plugin header to be a launcher. If no launcher is found on the -runpath then the built-in biz.aQute.launcher will be used.

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

那可能吗?

2:自定义导出的文件结构

默认情况下,BndTools在导出应用程序时会创建此文件结构:

jar / – >这是OSGI jar包文件

aQute / – >默认的BndTools Launcher(Launcher.class里面)

Meta-INF / – >为什么这里有Meta-INF文件夹?这不是JAR

launcher.properties – >启动器属性

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

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

基本上我想删除aQute,Meta-INF和启动.*文件并为二进制文件添加bin文件夹.

这应该可以用“Ant”,“Maven”或“Gridle”脚本来实现.但我可以创建一个没有BndTools支持的“BndTools项目”或“Gradle项目”.我安装了“BndTools Gradle插件”,但我找不到任何有关此主题的有用文档.

希望有人可以帮助我,或者指出我正确的方向.
问候.

最佳答案
(这个问题也在bndtools组列表中提出)

我有点困惑,因为你似乎已经获得了许可.您可以将bndrun文件导出到单个可执行JAR.在bndtools程序中,您可以通过获取Object服务然后获取“launcher.arguments”服务属性来访问命令行参数.这是给予启动器主方法的原始String [].

@Reference(target=“(launcher.arguments=*)”)
void setArgs( Map

导出的JAR是可执行的JAR.可以通过JPM轻松地将其转换为本地可执行文件.

jpm install -n mycode mycode.jar

你可以从http://jpm4j.org/#!/md/install安装jpm.

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

关于文件夹结构:

我需要我的捆绑包可以更新.如果我将所有捆绑包嵌入.Jar中,则无法更新它们.我只需要在外面捆绑包时启动Launcher.

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

彼得:
即使捆绑包在内部,只要您不清除Framework的存储区域,您仍然可以更新它们.您可以轻松地包含文件安装,例如从目录加载包或使用其他管理代理Apache Ace.

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

所以,如果你想要别的东西,你将不得不创建自己的出口商……

猜你在找的Java相关文章