【发布时间】:2017-07-18 10:23:32
【问题描述】:
我不确定您实际上是如何管理 bintray 上的 p2 存储库的?您通常上传的所有内容都必须与版本和包相关联,但是我们需要一种方法来使某些文件存储库的范围像撰写存储库的元数据或其他内容。 我知道这个问题已经以某种形式得到了回答,但是我需要更多信息,尤其是上传存储库范围内的东西的规则是什么,上传的文件是否必须位于存储库根目录下,它们可以有什么路径,等等. 我不太明白为什么这没有正式记录在 bintray 上。
【问题讨论】:
我不确定您实际上是如何管理 bintray 上的 p2 存储库的?您通常上传的所有内容都必须与版本和包相关联,但是我们需要一种方法来使某些文件存储库的范围像撰写存储库的元数据或其他内容。 我知道这个问题已经以某种形式得到了回答,但是我需要更多信息,尤其是上传存储库范围内的东西的规则是什么,上传的文件是否必须位于存储库根目录下,它们可以有什么路径,等等. 我不太明白为什么这没有正式记录在 bintray 上。
【问题讨论】:
Bintray 在存储库 > 包 > 版本下组织工件。
关系是:[repository] 1---* [package] 1---* [version] 1---* [artifact].
有一个例外 - 元数据文件。主要原因是元数据文件通常包含多个版本,因此无法关联到特定版本。另一个区别是版本化的工件在发布 180 天后不能被覆盖,而元数据文件预计会在每次发布版本时更改。这就是元数据文件基本上被称为“存储库范围”的原因。请注意,Bintray 通过名称识别元数据文件 - 即用户无法告诉 Bintray 哪个工件是元数据文件。除此之外,元数据文件可以像任何其他工件一样上传到任何路径。
例如,在 P2 中,以下文件名被视为元数据文件(我可能遗漏了一些):artifacts.xml/.jar/.xml.xz、content.xml/.jar/.xml.xz、compositeArtifacts.xml/.jar、compositeContent.xml/.jar、p2.index。
因此,每当您将名为(例如)artifacts.jar 的文件上传到 Bintray 中的通用或 maven 存储库时,它都会作为元数据文件处理。
还有一点需要注意,继续上面的解释——当你上传一个版本化的工件时,你必须指定它应该关联的包和版本。而当您上传元数据文件时(再次 - Bintray 通过其名称识别它),Bintray 不需要包和版本。
Bintray 有几个选项可以在上传 REST API 中指定包和版本:
PUT /content/:subject/:repo/:package/:version/:file_path:package/:version 参数)X-Bintray-Package: :packageX-Bintray-Version: :versionPUT /content/:subject/:repo/:file_path:package/:version参数)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,
伊农
【讨论】:
$FILEPATH 在我的curl 示例中)。如果您使用任何包管理器,例如maven,那么它有自己的结构要求,你应该遵循它(否则它将无法解决你的依赖关系......)。