【问题标题】:How to programmatically query a p2 repository for information and artifacts?如何以编程方式查询 p2 存储库以获取信息和工件?
【发布时间】:2019-06-24 00:01:50
【问题描述】:

我有一堆不同的 p2 存储库,我想以编程方式查询信息。他们提供什么类型的捆绑包/功能?什么类型的许可证(如果有)与捆绑包配对?我想简单地下载罐子。

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

有没有相对简单的方法来做到这一点?

我已经尝试了一些东西,但发现它们还不够:

解决方案 1:p2 导演

我知道 p2 导向器,但是我想从非 Eclipse 应用程序中查询信息并添加 Eclipse 以通过命令行触发命令似乎有点奇怪。此外,这会将我限制在 p2 导向器的相当有限的界面(例如,我认为我不能只下载一个 jar,我可以安装它,它也会解压缩它,也许还有其他我不知道的东西的)。

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

浏览 Eclipse API,我认为拥有 IArtifactRepository/IMetadataRepository 的实例就足够了(例如:https://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fequinox%2Fp2%2Frepository%2Fartifact%2Fclass-use%2FIArtifactRepository.html)。但是,获得工件似乎并非易事。如果我从头开始,使用这里分析器中提供的信息:Programmatically Start OSGi (Equinox)? 然后我必须构建和初始化 IProvisioningAgentProvider,然后是 IProvisioningEventBus,然后我需要一个注册表等。很难准确理解需要什么,并且很多东西都是Equinox-internals,所以这似乎也不是要走的路。

是否有许多与 Equinox 相关的捆绑包提供了“简单”的网关来执行此操作?

【问题讨论】:

  • composite p2 存储库包含文件content.jarartifacts.jar,它们只是压缩的XML 文件并包含您正在寻找的所有存储库元数据。这能回答你的问题吗?
  • @howlger 我知道,谢谢,但这意味着我必须为这些 xml 文件编写解析器,并且存储库和 xml 文件的格式似乎都尽可能标准化看,所以格式可能只是随机改变。

标签: java eclipse osgi p2


【解决方案1】:

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

-standalone  true
-plugin.p2 \
    aQute.bnd.repository.p2.provider.P2Repository; \
            url="https://bndtools.jfrog.io/bndtools/update/"

在 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 存储库中可用的 bsns 和版本列表。你 还可以从中为 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.aQute.bndlibbiz.aQute.bnd.repository,那么您也可以从您的代码中使用 P2 存储库。

您可以从 brew for MacOS 安装最新的 bnd。在其他操作系统上你 可以从 biz.aQute.bnd 组的 Maven Central 下载 biz.aQute.bnd JAR。

https://repo1.maven.org/maven2/biz/aQute/bnd/biz.aQute.bnd/4.1.0/biz.aQute.bnd-4.1.0.jar

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

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2011-09-11
    • 2021-12-12
    • 2015-10-29
    • 2017-01-06
    相关资源
    最近更新 更多