gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:02 25 4
gpt4 key购买 nike

我正在使用 BndTools ( http://bndtools.org/ ) 开发 OSGI 应用程序。一切正常,但我想在导出我的应用程序时更改一些内容。

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

1:将默认的 BndTools 启动器 (aQute.launcher) 替换为自定义启动器(或者将其设为 .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.

原因是我需要我的应用程序接受命令参数并且不干扰 aQute 启动器参数(就像所有运行参数一样)。另一方面,我想摆脱启动应用程序的批处理 .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 相比,它的优势在哪里?

基本上我想删除aQuteMETA-INFstart.* 文件并添加一个bin 二进制文件的文件夹。

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

希望有人能帮我解决这个问题或为我指明正确的方向。问候。

最佳答案

(bndtools group list 上也有人问过这个问题)

我有点困惑,因为你的愿望似乎已经实现了。您可以将 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

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

关于文件夹结构:

我需要我的包是可更新的。如果我将所有包嵌入到 .Jar 中,那么将无法更新它们。我只需要打包启动器,同时将 bundle 放在外面。

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

彼得:即使 bundle 在里面,只要您不清除框架的存储区域,您仍然可以更新它们。例如,您可以轻松地包含文件安装并从目录加载包或使用其他管理代理 Apache Ace。

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

因此,如果您想要其他东西,则必须创建自己的导出器……

关于java - 如何替换 BndTools 默认启动器并更改导出文件结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com