2016-11-23 114 views
1

這裏有一個類似的問題Access project extra properties in buildscript closure在buildscript範圍內使用gradle這個項目變量

,但我發現了一個「解決辦法」,這看起來並不像最佳

我有一個多gradle這個項目 - IM聲明庫使用

subprojects { 
repostiories { 
    maven {..} 
    } 
} 

現在我也有設置這些爲構建腳本,因爲使用插件IM的主要gradle這個文件 !

如此反覆buildscript {庫...

現在不是粘貼網址兩次,我想利用一個屬性 - 因爲我想通project.ext性能在buildscript階段沒有設置這樣,我把他們 在我gradle.settings文件

我不能設置rootProject.ext.xx設置,所以我不得不使用

gradle.ext { 
mavenURLs = [ companyURL1, companyURL2 ... etc] 
} 

現在,我可以在我的build.gradle文件中使用gradle.ext.mavenURLs

有沒有更好的方法? 有沒有一種方法可以爲一個模塊中的所有項目設置buildscript和依賴庫?而不必爲buildscript重複一次,爲依賴項重複一次?

回答

2
def repoClosure = { RepositoryHandler repoHandler -> 
    repoHandler.mavenLocal() 
    repoHandler.mavenCentral() 
    ['http://mycompany/repo1', 'http://mycompany/repo2'].each { mavenURL -> 
     repoHandler.maven { 
      url mavenURL 
      credentials { 
       username 'foo' 
       password 'bar' 
      } 
     } 
    } 
} 
project.with { 
    allprojects { 
     repoClosure(buildscript.repositories) 
     repoClosure(repositories) 
    } 
} 
+0

非常感謝,我在哪裏可以找到關於「project.with」關鍵字的內容?在DSL中找不到它 – Steve

+0

這是一個常規功能,而不是一個gradle功能。每個對象都有'with'方法。 https://objectpartners.com/2014/07/09/groovys-with-and-multiple-assignment/ –

+1

謝謝,我明白與簡單的容器對象的功能 - 但爲什麼它在你的例子中使用?不僅僅是所有項目repoClosure(buildscript.repositories) repoClosure(儲存庫) }已經工作?因爲你基本上只使用repoClosure調用一個方法() – Steve