【问题标题】:bintray support for p2 repositories对 p2 存储库的 bintray 支持
【发布时间】:2017-07-18 10:23:32
【问题描述】:

我不确定您实际上是如何管理 bintray 上的 p2 存储库的?您通常上传的所有内容都必须与版本和包相关联,但是我们需要一种方法来使某些文件存储库的范围像撰写存储库的元数据或其他内容。 我知道这个问题已经以某种形式得到了回答,但是我需要更多信息,尤其是上传存储库范围内的东西的规则是什么,上传的文件是否必须位于存储库根目录下,它们可以有什么路径,等等. 我不太明白为什么这没有正式记录在 bintray 上。

【问题讨论】:

    标签: p2 bintray


    【解决方案1】:

    Bintray 在存储库 > 包 > 版本下组织工件。
    关系是:[repository] 1---* [package] 1---* [version] 1---* [artifact].
    有一个例外 - 元数据文件。主要原因是元数据文件通常包含多个版本,因此无法关联到特定版本。另一个区别是版本化的工件在发布 180 天后不能被覆盖,而元数据文件预计会在每次发布版本时更改。这就是元数据文件基本上被称为“存储库范围”的原因。请注意,Bintray 通过名称识别元数据文件 - 即用户无法告诉 Bintray 哪个工件是元数据文件。除此之外,元数据文件可以像任何其他工件一样上传到任何路径。

    例如,在 P2 中,以下文件名被视为元数据文件(我可能遗漏了一些):
    artifacts.xml/.jar/.xml.xzcontent.xml/.jar/.xml.xzcompositeArtifacts.xml/.jarcompositeContent.xml/.jarp2.index
    因此,每当您将名为(例如)artifacts.jar 的文件上传到 Bintray 中的通用或 maven 存储库时,它都会作为元数据文件处理。

    还有一点需要注意,继续上面的解释——当你上传一个版本化的工件时,你必须指定它应该关联的包和版本。而当您上传元数据文件时(再次 - Bintray 通过其名称识别它),Bintray 不需要包和版本。

    Bintray 有几个选项可以在上传 REST API 中指定包和版本:

    • 在 URL 路径中:
      PUT /content/:subject/:repo/:package/:version/:file_path
      (注意 URL 中的 :package/:version 参数)
    • 在标题中:
      X-Bintray-Package: :package
      X-Bintray-Version: :version
      PUT /content/:subject/:repo/:file_path
      (注意网址中没有:package/:version参数)
    • 作为 URL 中的矩阵参数:
      PUT /content/:subject/:repo/:file_path;bt_package=:package;bt_version=:version

    对于元数据文件,在第二个和第三个选项中,Bintray 会忽略包和版本。在第一个选项中,Bintray 将包和版本作为路径的一部分处理,因此 bintray 中的结果路径包含它们(不是您可能想要的......)

    结论:
    长话短说——将工件上传到 Bintray 中的 P2 存储库的最佳方法是使用第二个或第三个上传选项。这种方式 - 如果它是一个版本化文件,它具有它应该关联到的包和版本。如果是元数据文件,则忽略包和版本,将文件上传到正确的目标路径。
    例如,使用cURL

    curl -u$BT_USER:$BT_PASS -XPUT -T <file-to-upload> "https://api.bintray.com/content/$BT_OWNER/$BT_REPO/$FILEPATH" -H "X-Bintray-Package: $BT_PKG" -H "X-Bintray-Version: $BT_VER"
    

    这是一篇很好的博文:Publish an Eclipse P2 Composite Repository on Bintray

    HTH,
    伊农

    【讨论】:

    • 好吧,但版本化文件默认放在版本子文件夹中,对吗?因此,如果我只是上传所有内容,那么元数据文件将不会落在该版本化文件夹中,因此可能会破坏所有内容?
    • 对于 Bintray 没有默认路径。任何文件都可以放在任何路径下,唯一真正的要求是没有路径冲突。您在上传文件时指定目标路径($FILEPATH 在我的curl 示例中)。如果您使用任何包管理器,例如maven,那么它有自己的结构要求,你应该遵循它(否则它将无法解决你的依赖关系......)。
    • 好吧,我的测试表明,如果我至少使用 ui 将某些内容上传到一个版本,使用空路径甚至 /,除非您更改路径,否则它将落在 version/ 文件夹中
    • 首先 - 您应该自动化您的流程并使用 REST API,而不是 UI。关于 UI 的行为 - 您使用的是哪种存储库类型?我做了一个快速测试,将一个简单的文件上传到具有空目标路径的通用存储库,并将其上传到根目录(如预期的那样)。
    • 那我得再测试一次。是的,自动化,但我主要测试的是事物的行为方式等。我可能会在稍后再次测试
    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 2021-01-20
    • 2013-01-26
    • 1970-01-01
    • 2011-02-24
    • 2020-12-06
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多