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官方还在完善中,也许将来会支持也说不定。