gradle
使用maven鏡像倉庫的方法大致上有兩種html
使用gradle
構建的項目,在項目的根目錄下都會有一個build.gradle
文件,存儲着構建的配置,其配置語法使用groovy DSL
,因此熟悉groovy
的用戶能夠很輕鬆上手配置,包括修改依賴的maven倉庫。java
gradle的構建依賴一般包含兩部分:git
在這個文件首部通常都會看到buildscript {}
這個閉包配置,下面有個子閉包repositories {}
,配置的就是構建前的使用的倉庫,一般是gradle插件所在的倉庫。 有多個maven {}
配置段,分爲如下幾種可選配置:github
mavenLocal()
: 直接使用~/.m2/
做爲maven倉庫的路徑mavenCentral()
: 使用maven中央倉庫http://central.maven.org/
做爲maven倉庫的路徑jcenter()
: 使用jcenter倉庫http://jcenter.bintray.com/
做爲maven倉庫路徑,在國內一般比mavenCentral()
快不少maven { url: '/path/to/custom/url' }
: 自定義的maven倉庫路徑配置的時候大致須要注意如下兩點:mongodb
明白以上兩點,大致就知道怎麼配置了,應該按照速度從快到慢的順序填寫,因此一般mavenLocal()
放第一位,mavenCentral()
/jcenter()
一般放最後做爲冗餘配置,在本地鏡像不可用時做爲備用倉庫。apache
因而一個依賴於shadow
插件的構建前依賴看起來像這樣:api
buildscript { repositories { mavenLocal() maven { url "http://maven.aliyun.com/nexus/content/groups/public/" } jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3' } } apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'java'
在gradle 2.x的某個版本以後引入了一個新的插件配置DSL plugins {}
,再也不須要apply from
這種形式引入插件,改成plugins { id 'java' }
這種形式。不過目前還在孵化中,官方並不建議過早使用,這裏也提一下好了。緩存
若是使用了plugins {}
這個閉包定義的插件依賴,就再也不使用buildscript {}
了,官方默認會從https://plugins.gradle.org/m2/
這個倉庫去查找插件以及依賴,若是要覆蓋這個倉庫,不在build.gradle
中配置,而是在settings.gradle
中,詳見官方文檔.閉包
在settings.gradle
的第一個配置塊中加入pluginRepositories {}
才能夠生效,配置語法和repositories {}
差很少:app
pluginRepositories { maven { url 'maven-repo' } }
定義構建時依賴的倉庫就在repositories {}
這個閉包中,規則和配置和buildscript.repositories {}
徹底一致,這裏就再也不贅述了,直接貼樣例:
repositories { mavenLocal() maven { url "https://maven.aliyun.com/repository/public" } jcenter() } dependencies { compile "org.apache.hbase:hbase-client:1.2.2" compile "org.mongodb:mongodb-driver:3.3.0" compile "org.yaml:snakeyaml:1.17" compile 'org.apache.logging.log4j:log4j-core:2.6.2' compile 'org.apache.logging.log4j:log4j-api:2.6.2' }
下面的dependencies {}
就是定義的到底依賴哪些jar包,若是本地的gradle緩存中沒找到,就會從repositories {}
倉庫中尋找。
以上的方案適合本身的項目,方便直接修改build.gradle
的狀況,某些狀況下沒法直接修改build.gradle
,好比參與開源項目,並不方便修改別人寫好的配置,再好比在CI流水線中,並不方便對源代碼進行任何形式的修改等等場景。
對於這一類的需求,gradle提供了init-script的形式修改倉庫。也就是說,這種形式很是相似於Linux的初始化腳本init.d,會加載一遍以後才完成系統啓動。每一個gradle命令執行以前會先執行一遍init-script,而後才真正執行構建的task。
所以,咱們只要把倉庫的配置寫入init-script配置便可,因爲build.gradle
配置一般都會定義多個maven倉庫,所以init-script腳本能夠不用考慮倉庫冗餘的問題。
關於init-script詳情能夠去看官方文檔介紹,我這裏簡單總結一下。
init腳本的查找路徑:
-I
/--init-script
直接在命令行指定初始化腳本~/.gradle/init.gradle
~/.gradle/init.d/*.gradle
${GRADLE_HOME}/init.d/*.gradle
若是有多個init script能夠執行,那麼將按照以上的順序依次執行,對於*.gradle
這樣的文件將按照文件名排序順序執行。
撇開別的高級玩法和高級定製不談,只說說定義鏡像倉庫怎麼搞。個人作法是直接新建~/.gradle/init.d/repo.gradle
:
allprojects { buildscript { repositories { maven { url "https://maven.aliyun.com/repository/public" } } } repositories { maven { url "https://maven.aliyun.com/repository/public" } } }
這樣就等於設置了默認的倉庫配置,那麼每次執行gradle的時候都會從我但願的鏡像站中去尋找依賴並下載了。
但須要注意的是因爲plugins {}
DSL目前不使用buildscript {}
配置,也沒法經過init script定製的方式傳入settings.gradle
中,因此這種方式是不起做用的。不過好在這個DSL官方還在完善中,也許將來會支持也說不定。