2016-11-02 98 views
2

我最終不得不在我的build.gradle文件中的所有地方定義我的Maven存儲庫。定義往往是非常麻煩的:上述的gradle如何提供限定常用行家存儲庫的一個很好的方式(即jcenter()Gradle函數來定義自定義的Maven倉庫?

repositories { 
    jcenter() 

    maven { 
     url "https://mymavenurl/releases" 
     credentials(Credentials) { 
      username USERNAME 
      password PASSWORD 
     } 
    } 
} 

的通知。我想在插件或父gradle腳本中使用一種方法來定義函數庫中的存儲庫,或者靜態地定義存儲庫,然後在repositories塊中調用它:myMavenRepo()

我對groovy的知識缺乏,所以我不太瞭解我需要解析的groovy來源,我看到找到一個很好的方法來做到這一點。我將如何做到這一點?

我知道,在父gradle文件中,我可以使用allProjectssubProjects。我不想將這些maven倉庫添加到所有模塊,而只是添加特定的倉庫。

回答

5

嘗試是這樣的:

repositories.ext.myRepo = { 
    repositories.maven { 
     url "https://mymavenurl/releases" 
     credentials() { 
      username USERNAME 
      password PASSWORD 
     } 
    } 
} 

那麼你應該能夠調用:

repositories { 
    mavenCentral() 
    myRepo() 
} 

同樣可以爲buildscript庫來完成:

buildscript.repositories.ext.myRepo = { 
    buildscript.repositories.maven { 
     url "https://mymavenurl/releases" 
     credentials() { 
      username USERNAME 
      password PASSWORD 
     } 
    } 
} 
+0

這似乎工作。謝謝:-) – spierce7

+0

對我來說,它只適用於存儲庫,但不適用於buildscript.repositories – Gavriel

+1

這工作:project.buildscript.repositories.ext.mavenMyPluginsRelease = { project.buildscript.repositories.maven {... – Gavriel

2

如果您在所有項目中使用這些存儲庫,則可以在initialization script中定義它們。只要創建一個文件$HOME/.gradle/init.gradle包含

allprojects { 
    repositories { 
     jcenter() 

     maven { 
      url "https://mymavenurl/releases" 
      credentials(Credentials) { 
       username USERNAME 
       password PASSWORD 
      } 
     } 
    } 
} 
+0

啊,我應該指定。我不想將它添加到所有項目中。 – spierce7