2015-11-02 24 views
1

我有一個Java項目的Gradle構建腳本。我已經建立了一個內部的Artifactory存儲庫作爲項目依賴項的一個遠程。Gradle從未在JCenter存儲庫中解決Artifactory的相關性問題

當項目正在編譯時,我希望Gradle先去Artifactory並請求;如果它在那裏失敗,它應該接下來嘗試JCenter作爲備份。

我在Gradle 2.8中使用了Gradle Artifactory插件v3.1.1。該插件定義了contextUrlpublish回購,並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回購協議。

優選地,解決方案將解決兩個buildscriptrepositories關閉此重複定義,但它似乎不太可能,我可以參考的屬性artifactory瓶蓋內安裝了搖籃,Artifactory的插件之前。

回答

3
  1. 你並不需要同時artifactory {}配置和repositories配置在腳本中的主要部分。請使用repositories指向主要部分中的buildscript然後artifactory{} DSL中的Artifactory實例。
  2. 你不需要在你的腳本中配置jcenter,Artifactory默認代理它。您不需要使用JCenter「備份」Artifactory,因爲JCenter中存在的任何內容始終可以從Artifactory中解析出來。
+0

1.我會測試一下。謝謝。 2.這個想法與jcenter備份引用是Artifactory在我們的防火牆後面運行。如果我們的Artifactory服務器不可用,那麼將jcenter引用爲備份。在這種情況下,Gradle不會嘗試解析Artifactory,然後嘗試JCenter。但是,通過Gradle中的jcenter引用,它似乎總是通過JCenter首先解決依賴關係,然後Artifactory(如果JCenter不可用)(我們自己的庫中就是這種情況)。我們想要顛倒這個順序,首先嚐試Artifactory,然後嘗試JCenter。 – AmundsenJunior

+0

快捷Artifactory是一個非常糟糕的主意。如果您擔心Artifactory正在啓動,您應該探索Artifactory的主動 - 主動和/或主動 - 被動部署,而不是在發生故障時將其縮短。 – JBaruch

+1

感謝您的部署信息。我們Artifactory的HA比一些Gradle解決方案更好的解決方案。 – AmundsenJunior