Gradle 介绍
Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。
Gradle不单单是一个配置脚本,它的背后是几门语言,如果硬让我说,我认为是三门语言。
- Groovy Language
- Gradle DSL
- Android DSL
DSL的全称是Domain Specific Language,即领域特定语言,或者直接翻译成“特定领域的语言”,,其实就是这个语言不通用,只能用于特定的某个领域,俗称“小语言”。因此DSL也是语言。
Groovy和Java
Groovy是一门jvm语言,它最终是要编译成class文件然后在jvm上执行,所以Java语言的特性Groovy都支持,我们完全可以混写Java和Groovy。
Groovy提供了更加灵活简单的语法,大量的语法糖以及闭包特性可以让你用更少的代码来实现和Java同样的功能。
类似解析xml文件,Groovy就非常方便,只需要几行代码就能搞定,而如果用Java则需要几十行代码。
安装Gradle
在Android Studio中新建项目成功后会下载Gradle,不翻墙也是可以下载,但是访问特别慢,建议翻墙下载。
Gradle下载后路径:
- Mac上默认 /Users/<用户名>/.gradle/wrapper/dists 目录
- Win上默认 C:\Documents and Settings<用户名>.gradle\wrapper\dists 目录
目录下有个 gradle-x.xx-all 的文件夹。
如果下载实在太慢,但是又不想翻墙的话,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下,不过还是建议让它直接下载的好。
Maven 仓库
Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。
在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven 仓库能帮助我们管理构件(主要是JAR),它就是放置所有JAR文件(WAR,ZIP,POM等等)的地方。
Maven 仓库有三种类型:
- 本地(local)
- 中央(central)
- 远程(remote)
本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。
运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载到。
中央仓库的关键概念:
- 这个仓库由 Maven 社区管理。
- 不需要配置。
- 需要通过网络才能访问。
要浏览中央仓库的内容,maven 社区提供了一个 URL:maven仓库 。使用这个仓库,开发人员可以搜索所有可以获取的代码库。
远程仓库
如果 Maven 在中央仓库中也找不到依赖的文件,它会停止构建过程并输出错误信息到控制台。
为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
Gradle加载库使用
Gradle中有多个maven {}配置段,分为以下几种可选配置:
配置 | 含义 |
---|---|
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仓库路径 |
根目录下的gradle文件
在我们的工程的根目录下的gradle文件配置
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
//默认加载所需类库都会去jcenter中加载 如果没有找对对应的类库则会去我们配置的Maven仓库中查找
jcenter()
maven{
//配置Maven仓库的地址
url "http://repo.springsource.org/libs-milestone-local"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
可以看见jcenter()
在app的目录下的build.gradle文件里.
以及会看到 compile 'com.google.gson:gson:2.2.4'之类的写法
com.google.gson:gson:2.2.4这个库其实在jcenter
里边有 ,如果加载一个类库jcenter
中没有,那么就会去URL配置的Maven仓库中查找。
app目录下的gradle文件
配置好上面的文件后 ,我们需要在 app目录下的build.gradle中去引用所需要的类库:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:support-v4:25.1.1'
testCompile 'junit:junit:4.12'
compile 'com.gopivotal.manager:common:1.2.1.RELEASE'
}