2017-07-18 157 views
0

我不確定您如何實際管理bintray上的p2存儲庫?您通常上傳的所有內容都必須與版本和軟件包相關聯,但我們需要一種方法來將某些文件存儲庫的範圍與組成存儲庫的元數據或其他內容一樣。 我知道這個問題已經以某種形式得到了答覆,但我需要更多的信息,尤其是上傳存儲庫作用域的東西的規則是什麼,它們有什麼樣的路徑必須將上傳的文件存儲在存儲庫根目錄下,以及諸如此類的東西。 我不太明白爲什麼這不正式記錄在bintray上。bintray支持p2存儲庫

回答

0

Bintray在存儲庫>軟件包>版本下組織工件。
關係是:​​。
這有一個例外 - 元數據文件。主要原因是元數據文件通常包含多個版本,因此它們無法關聯到特定版本。另一個區別是,版本化構件在發佈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
    (注意有在URL沒有: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,
Yinon

+0

很好,但版本的文件默認放在一個版本的子文件夾嗎?所以如果我只上傳所有內容,那麼元數據文件將不會落入該版本文件夾,因此可能會破壞所有內容? –

+0

對於Bintray,沒有默認路徑。任何文件都可以放在任何路徑下,唯一真正的要求是沒有路徑衝突。您在上傳文件時指定目標路徑(在我的'curl'示例中'$ FILEPATH')。如果您使用任何軟件包管理器,例如maven,那麼它有自己的結構要求,你應該遵循它(否則它將無法解決你的依賴關係...)。 – yinon

+0

以及我的測試表明,如果我至少上傳了一些與ui相關的版本,使用空路徑甚至/,它會降落在版本/文件夾中,除非您更改了路徑 –