我正在使用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-inbiz.aQute.launcher
will be used.
原因是我需要我的应用程序接受命令args而不是干扰aQute启动器(就像所有-run args).另一方面,我想摆脱启动应用程序的批处理.bat / .sh方法,并使用单个.jar文件来启动应用程序.
那可能吗?
默认情况下,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插件”,但我找不到任何有关此主题的有用文档.
希望有人可以帮助我,或者指出我正确的方向.
问候.
我有点困惑,因为你似乎已经获得了许可.您可以将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,您可以在任何系统上安装它.
所以,如果你想要别的东西,你将不得不创建自己的出口商……