问题标签 [bnd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
osgi - Eclipse 下使用 Bndtools 配置 Apache Felix FileInstall
我在 Eclipse Mars 下使用 Bndtools 插件。在一个项目中,我需要 Apache FileInstall 包,并且我在运行描述符下的“运行要求”中选择了它。捆绑包处于活动状态。
我不明白如何获取 FileInstall 的当前参数,如轮询、监视配置文件的目录等等,所以我不知道将实现 ManagedService 的类的配置文件放在哪里。
如果我尝试在 VM 参数下添加以下行...
-Dfelix.fileinstall.dir=/home/ppatierno/Downloads
几秒钟后,Config Admin 服务进入 Stopping 状态。
如果我没有在“运行要求”下添加 FileInstall 包,而是从 apache felix 控制台安装并启动它,它会启动并变为活动状态,但不会打印属性上方的主要配置。
任何想法 ?
java - 使用 bndtools 包装从默认包导入的第三方 jar
我想包装一个第三方罐子。不幸的是,供应商将一个具有一种方法的单一类(a.class)放入默认包中。
当我尝试使用 包含资源Include-Resource: @lib/acme-8.0.jar
时,会导致以下错误:
bnd print -all acme-8.0.jar
给我以下输出(缩短,供应商名称替换为 acme)
如果我正确理解此输出,则有几个包使用默认包。这怎么可能呢?据我所知,您不能从默认包中导入类。
我已经联系了供应商,要求移动有问题的班级。很有可能,他不会听从我的建议。
是否有解决方法来处理默认包中的类?
maven - 使用 DS 和 maven-bundle-plugin 生成清单的正确方法是什么?
我今天使用 maven-bundle-plugin 来生成我的项目清单。由于其他限制,我的模块使用“jar”包装(我不能使用“bundle”包装),目前,我的 pom 看起来像这样:
我现在想从带注释的组件中生成一个“Service-Component”标头和 DS xml 描述符,但是添加“ <_dsannotations>*</_dsannotations>
”不起作用:
- Service-Component 标头已正确生成,但 jar 中不存在 xml
- 如果我在没有明确目标的情况下重建我的 maven 项目,则“Service-Component”标头有重复的引用:在挖掘代码后,插件使用来自 target/classes/META-INF/MANIFEST.MF 的旧生成清单并合并它与新生成的。然后连接“服务组件”
那么,我应该如何配置我的 pom 以使其正常工作?现在,我使用“unpackBundle”选项(为了在我的包中包含 xml)和一个空的 src/main/resource/MANIFEST.MF(为了绕过旧清单的合并):它看起来很丑: -)
此外,“bnd-maven-plugin”按预期工作,但与 maven 的集成可能太轻(或没有记录?),作为父 pom 中的“全局配置”,Bundle-SymbolicName 或 Bundle-Name 的生成, ETC。
谢谢!
java - 将捆绑包添加到存储库后,bnd gradle 插件失败
我正在使用 Eclipse 中的 bndtools 处理 OSGi 包。我刚刚向存储库添加了一个新包(apache commons logging)cnf/localrepo
,我们的 CI 服务器现在无法构建:
为简单起见,对项目名称进行了轻微混淆。
在我看来,gradle 插件没有刷新存储库索引 - 如果我的一个队友从我们的 vcs 更新而没有在 Eclipse 中刷新,那么他们会得到同样的错误。
我知道 bndtools 有 org.osgi.impl.bundle.repoindex.cli 插件,但我对 bndtools 或 gradle 的了解还不够,无法将它应用到我的项目中。我也觉得好像(a)gradle插件应该自己刷新存储库或者(b)我错误地使用了存储库。
是否可以在我们的 build.gradle 中添加一个在构建之前刷新索引的任务?
我们是否应该将所有依赖项移动到在线存储库,以便 bnd 不需要管理索引?
java - 实现 api bundle 的 library bundle 是否应该导出 api 包?
我有一棵大树,它使用其他捆绑包。例如:
- 基本包使用 api 包。
- api 包是一个纯 api 包
- 基础包使用api包,是一个库包(有用的库函数,其他包可以使用)
- api 包导出 api 包
- 基本包导出基本包。基本包还从 api 包中导出 api 包。
让基础包也导出api包是否正确?
我这样做是因为现在用户只需将基本包添加到他们的构建路径中,并且 bndtools 可以找到基本 + api 包。否则,使用基本包的用户需要弄清楚基本包使用了 api 包,他们需要将其添加到构建路径中。
rest - 休息服务的 Junit 测试
我想通过junit测试我的休息服务。这些服务在 BnD 捆绑包(Felix)中。实际上,我想为 rest url 编写测试用例。你能建议我任何文档吗,或者你能告诉我我该怎么做。
请记住,我在 BnD 捆绑包中的项目。
java - 我可以使用版本限定符来要求 OSGi 中的特定包版本吗?
我有一个想要包装的第三方 JAR - 它没有自己的 OSGi 清单。例如,org.myproject
。所以我创建了一个捆绑包装器。
这很好用——我提供了org.myproject
. 这是由org.myproject
. 说,1.0.1
。
现在,org.myproject
已更改,我想包含更改。但是,没有官方发布。这听起来像我可以使用限定符来表示较新的版本:1.0.1.$timestamp
但是,当使用 bndtools 包装 JAR 时,包导出的版本仍为1.0.1
.
是否可以在 OSGi 中导出然后导入特定于限定符的包版本?在 bndtools 中管理此问题的最佳方法是什么?
java - 关于使用 OSGi 设置 Maven 多模块项目的反馈
我正在与 OSGi 取得联系并尝试使用 Apache Felix 和 Maven 设置项目。我想使用多模块构建和声明性服务。该项目托管在 GitHub 上:osgi-maven-example(请注意,链接指向特定的提交,而不是存储库的 HEAD。)
我对项目的整体设置有几个问题:
根据Neil Bartlett的说法,
bnd-maven-plugin
应该优先使用 Apache Felix Bnd 插件,因为它尊重 Maven 的生命周期。从 bnd-maven-plugin 的年龄来看,这似乎是一种相对较新的方法,因此我不确定这样做是否是个好主意。我正在使用
org.apache.felix.scr.annotations
来自 Apache Felix 的声明性服务包 ( ) 来定义我的组件。使用这些注释maven-scr-plugin
来生成服务描述符,这些服务描述符MANIFEST.MF
通过使用文件中的以下行包含在 中bnd.bnd
:Service-Component: OSGI-INF/*.xml
. 这是声明式服务的使用方式吗?IntelliJ 在
GermanGreeter
-class 中显示警告: 这到底是什么意思?我需要关心这个吗?我该如何解决?
尽管我对这个工作示例感到非常满意,但我很好奇我是否以他们预期的方式使用所有这些技术,如果我能在开始在更大范围内使用它之前获得有关整体设置的一些反馈,我将不胜感激项目。
java - 如何替换 BndTools 默认启动器并更改导出文件结构
我正在使用 BndTools ( http://bndtools.org/ ) 来开发 OSGI 应用程序。一切正常,但在导出应用程序时我想更改一些内容。
我正在尝试实现两件事(我认为它们可能是相关的):
1: 将默认的 BndTools 启动器 ( aQute.launcher
) 替换为自定义启动器 (或有.JAR
格式)
如何摆脱或将默认 BndTools 启动器 (aQute.launcher) 更改为自定义启动器?
关于这个话题,我唯一能找到的是:http: //goo.gl/jYliih
启动器没有内置到 bnd 中,实际的启动策略是参数化的。通过将 JAR 放在
-runpath
. A.JAR
应该有一个 Launcher-Plugin 标头作为启动器。如果没有找到启动器,-runpath
则将使用内置的biz.aQute.launcher
。
原因是我需要我的应用程序接受命令参数而不干扰 aQute 启动器(就像所有 -run 参数一样)。另一方面,我想摆脱.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
和start.*
文件并为二进制文件添加一个bin
文件夹。
这应该可以通过“Ant”、“Maven”或“Gridle”脚本来实现。但我可以只创建一个“BndTools 项目”或一个“Gradle 项目”而不支持 BndTools。我安装了“BndTools Gradle 插件”,但在任何地方都找不到关于此主题的任何有用文档。
希望有人可以帮助我或指出我正确的方向。问候。
java - 在 bndrun 文件中,如何在 -runvm 中传递有空格的属性?
在一个.bndrun
文件中,我有:
当我运行运行描述符时,控制台显示:
这是因为以下生成的命令行:
这个空间显然让它心烦意乱。通常,引号是解决此问题的方法。但如果我添加它们,它们似乎被剥离了: