1
我有一個Java項目的Gradle構建腳本。我已經建立了一個內部的Artifactory存儲庫作爲項目依賴項的一個遠程。Gradle從未在JCenter存儲庫中解決Artifactory的相關性問題
當項目正在編譯時,我希望Gradle先去Artifactory並請求;如果它在那裏失敗,它應該接下來嘗試JCenter作爲備份。
我在Gradle 2.8中使用了Gradle Artifactory插件v3.1.1。該插件定義了contextUrl
,publish
回購,並resolve
在一個封閉回購:
artifactory {
contextUrl = "${artifactoryContextUrl}"
publish {
repository {
repoKey = 'Release'
username = "${artifactoryUser}"
password = "${artifactoryPassword}"
maven = true
}
}
resolve {
repository {
repoKey = 'repo'
username = "${artifactoryUser}"
password = "${artifactoryPassword}"
maven = true
}
}
}
無論是buildscript和項目定義其庫:
buildscript {
repositories {
maven {
name 'Artifactory'
url "${artifactoryContextUrl}repo"
credentials {
username = "${artifactoryUser}"
password = "${artifactoryPassword}"
}
}
jcenter()
}
}
repositories {
maven {
name 'Artifactory'
url "${artifactoryContextUrl}repo"
credentials {
username = "${artifactoryUser}"
password = "${artifactoryPassword}"
}
}
jcenter()
}
我不得不求助於這些重複的語句反覆定義Artifactory回購協議,因爲我似乎無法找到一種方法來定義並將artifactory
閉包放置在構建腳本中,以便Gradle在嘗試JCenter之前引用此定義的resolve
回購協議。
優選地,解決方案將解決兩個buildscript
和repositories
關閉此重複定義,但它似乎不太可能,我可以參考的屬性artifactory
瓶蓋內安裝了搖籃,Artifactory的插件之前。
1.我會測試一下。謝謝。 2.這個想法與jcenter備份引用是Artifactory在我們的防火牆後面運行。如果我們的Artifactory服務器不可用,那麼將jcenter引用爲備份。在這種情況下,Gradle不會嘗試解析Artifactory,然後嘗試JCenter。但是,通過Gradle中的jcenter引用,它似乎總是通過JCenter首先解決依賴關係,然後Artifactory(如果JCenter不可用)(我們自己的庫中就是這種情況)。我們想要顛倒這個順序,首先嚐試Artifactory,然後嘗試JCenter。 – AmundsenJunior
快捷Artifactory是一個非常糟糕的主意。如果您擔心Artifactory正在啓動,您應該探索Artifactory的主動 - 主動和/或主動 - 被動部署,而不是在發生故障時將其縮短。 – JBaruch
感謝您的部署信息。我們Artifactory的HA比一些Gradle解決方案更好的解決方案。 – AmundsenJunior