gradle 的优点
注:想要深入了解区别那就去看看专门讲解这里的博主,他们比我讲的会更加详细 本文章主要是对文件的配置及其理解
简单粗暴的来讲
就是为了简化我们繁琐的配置
gradle的两大主要文件一个是settings.gradle以及build.gradle
这里引用百度的话来解释settings.gradle
单项目构建该文件可选,但多项目构建这个文件是必须的,因为需要在这个文件中声明哪些子项目需要参与构建,也包括子项目路径、名称等
Gradle允许在任意子项目中进行多项目的构建,那Gradle如何决定此次构建是多项目还是单项目构建呢?如果该构建目录中存在settings.gradle文件,那么就依据该文件来进行构建;如果不存在该文件,那么会向上一级目录查询文件是否存在(注意:只会向父目录查询,而不是一直向上级目录递归查询),如果存在就依据该文件进行构建,否则此次构建就是一个单项目的构建。因此,如果需要在多项目的一个工程目录结构中进行单项目的构建,我们可以在目标子项目的根目录下创建一个settings.gradle文件
ok,那么当我们身为一个小白,我们单项目可能都不能得心应手,就不要去奔跑了。
build.gradle文件结构及其配置
plugins
// 需要引进的相关插件Plugins
plugins {
// 'java' 表示应用java插件添加对java的支持
id 'java'
// 'idea' 表示应用idea插件添加对idea的支持
id 'idea'
// gradle
id 'io.franzbecker.gradle-lombok' version '3.1.0'
// Spring boot
id 'org.springframework.boot' version '2.1.6.RELEASE'
// Maven
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}
代码注解都很明显了,如果想要构建自己的项目这个配置完全可以拿到你的项目中,当然你要考虑的是你的项目是否需要这些插件。
repositories
// repositories闭包 存储库
// 声明在何处查找项目的依赖项
repositories {
// 指定使用maven本地仓库,而本地仓库在配置maven时setting文件指定的仓库位置。
mavenLocal()
maven {
name "aliyun"
url "https://maven.aliyun.com/repository/gradle-plugin"
}
// 这是Maven的中央仓库,无需配置,直接声明就可以使用
mavenCentral()
// JCenter中央仓库,实际也是是用的maven搭建的,但相比Maven仓库更友好,通过CDN分发,并且支持https访问。
// jcenter()
}
一定要注意区别开 什么是仓库 什么是依赖
仓库用于存储依赖,依赖就相当于货物,存放在仓库中。
dependencies
// dependencies闭包 依赖
// 是用于声明这个项目依赖于哪些jar
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// implementation 'com.alibaba:druid-spring-boot-starter:1.1.18'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'
implementation 'org.mybatis:mybatis-typehandlers-jsr310:1.0.2'
implementation 'mysql:mysql-connector-java:5.1.47'
implementation 'com.github.pagehelper:pagehelper-spring-boot-starter:1.2.12'
implementation group: 'com.alibaba', name: 'fastjson', version: "1.2.53"
implementation group: 'commons-io', name: 'commons-io', version: '2.6'
compileOnly 'log4j:log4j:1.2.17'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
(扩展)对于各种依赖方式的说明
每个依赖jar前面的关键字就是jar的依赖方式
- implementation
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。 - api
完全等同于compile指令 - compile
这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。 - testCompile
testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。 - debugCompile
debugCompile 只在debug模式的编译和最终的debug apk打包时有效。 - releaseCompile
releaseCompile 仅仅针对Release模式的编译和最终的Release apk打包 - provided
只在编译时有效,不会参与打包,可以在自己的moudle中使用该方式依赖。比如com.android.support,gson这些使用者常用的库,避免冲突。 - apk(runtimeOnly)
只在生成apk的时候参与打包,编译时不会参与,很少用。