Java 如何以编程方式查询p2存储库中的信息和工件?

Java 如何以编程方式查询p2存储库中的信息和工件?,java,eclipse,osgi,p2,Java,Eclipse,Osgi,P2,我有很多不同的p2存储库,我想通过编程查询信息。它们提供什么类型的捆绑包/功能?什么类型的许可证(如果有)与捆绑包配对?我只想下载JAR 换句话说,我想以编程方式查询和下载p2存储库中包含的任何公共信息,但实际上我不需要做任何与此信息相关的OSGi操作 有没有一种相对简单的方法可以做到这一点 我已经尝试了一些方法,但发现它们不够: 解决方案1:p2主管: 我知道p2控制器,但是我想从非eclipse应用程序中查询信息,然后通过命令行将eclipse添加到触发器命令似乎有点奇怪。此外,这将限制我使

我有很多不同的p2存储库,我想通过编程查询信息。它们提供什么类型的捆绑包/功能?什么类型的许可证(如果有)与捆绑包配对?我只想下载JAR

换句话说,我想以编程方式查询和下载p2存储库中包含的任何公共信息,但实际上我不需要做任何与此信息相关的OSGi操作

有没有一种相对简单的方法可以做到这一点

我已经尝试了一些方法,但发现它们不够:

解决方案1:p2主管:

我知道p2控制器,但是我想从非eclipse应用程序中查询信息,然后通过命令行将eclipse添加到触发器命令似乎有点奇怪。此外,这将限制我使用p2控制器相当有限的接口,例如,我想我不能只下载一个jar,我可以只安装它,它还可以解压它,可能还做其他我不知道的事情

解决方案2:手动构建OSGi容器:

浏览Eclipse API时,我认为拥有IArtifactRepository/IMetadataRepository的实例就足够了,例如,请参见:。然而,获取这些工件似乎并不简单。如果我从零开始,使用这里的答案中提供的信息:然后我必须构建并初始化一个IProvisioningAgentProvider,然后是一个IProvisioningEventBus,然后我需要一个注册表,等等。很难准确理解需要什么,很多东西都是equinox的内部结构,因此,这似乎也不是真正的方式去


许多与equinox相关的捆绑包是否提供了一个简单的网关来实现这一点?

bnd代码库有一个P2存储库,可能会很有用。bnd命令行允许您以交互方式使用它。首先创建一个bndrun文件repo.bndrun:

在shell的同一目录中,您可以执行以下操作:

$ bnd repo -w repo.bndrun list

biz.aQute.bnd.maven                      [4.2.0.201901301338-SNAPSHOT]
biz.aQute.bndlib                         [4.2.0.201901301338-SNAPSHOT]
biz.aQute.repository                     [4.2.0.201901301338-SNAPSHOT]
biz.aQute.resolve                        [4.2.0.201901301338-SNAPSHOT]
...
org.bndtools.templating.gitrepo          [4.2.0.201901301338-SNAPSHOT]
org.bndtools.versioncontrol.ignores.manager [4.2.0.201901301338-SNAPSHOT]
org.bndtools.versioncontrol.ignores.plugin.git [4.2.0.201901301338-SNAPSHOT]
org.slf4j.api                            [1.7.2.v20121108-1250]
这将显示p2回购中可用的BSN和版本列表。你 还可以从中为OBR生成OSGi XML索引:

bnd repo -w repo.bndrun index 
该索引非常容易解析,并且具有OSGi标准格式

如果您需要工件的版本:

$ bnd repo -w repo.bndrun versions bndtools.api
[4.2.0.201901301338-SNAPSHOT]
您还可以从中获取工件:

$ bnd repo -w repo.bndrun get bndtools.api
$ ls -1
bndtools.api-4.2.0.201901301338-SNAPSHOT.jar
repo.bndrun
如果包含Maven Central中的biz.aqte.bndlib和biz.aqte.bnd.repository,则还可以使用代码中的P2存储库

您可以从brew for MacOS安装最新的bnd。在其他方面是你 可以从Maven Central的组biz.aqte.bnd下载biz.aqte.bnd JAR


[我是这个项目的提交者]

非p2存储库包含文件content.jar和artifacts.jar,它们只是压缩的XML文件,包含您正在寻找的所有存储库元数据。这回答了你的问题吗?@howlger我知道,谢谢,但这意味着我必须为这些xml文件编写一个解析器,就我所见,存储库和xml文件的格式似乎都不是标准化的,因此格式可能只是随机更改。
$ bnd repo -w repo.bndrun get bndtools.api
$ ls -1
bndtools.api-4.2.0.201901301338-SNAPSHOT.jar
repo.bndrun