Gradle是什么?Gradle的依赖方式有什么不同?

  • 项目管理工具一般用Maven或者是Gradle,Java开发者一般对于Maven会更熟悉一些。
  • 我现在的项目使用Gradle管理,所以借此机会学习了一下Gradle。
  • 学习资料 入门级别 / 学习资料 需要基础
  • Gradle中文手册

Gradle和Maven的区别

相同点

  • Gradle 和 Maven 都是打包代码,构建工程的框架。Maven能做的事 Gradle也都能做。

不同点

  • Maven采用XML语言描述工程的配置和依赖的的地坐标。
  • Gradle采用Groovy脚本语言描述工程配置和依赖的坐标。
  • 相对于XML,Groovy脚本语言会显得简洁的多。
  • Gradle的配置要比Maven灵活的多,因为是基于Groovy脚本编写,我们可以直接写代码告诉Gradle做什么。通过org.gradle.api.Project中的方法如 afterEvaluate beforeEvaluate task 等来灵活的配置Gradle Configura阶段。

Gradle关键知识点

  • 闭包

Groovy中的闭包是一个开放,匿名的代码块,可以接受参数,返回值并分配给变量

闭包是可以用作方法参数的代码块,Groovy的闭包更象是一个代码块或者方法指针,代码在某处被定义然后在其后的调用处执行。一个闭包实际上就是一个Closure类型的实例。写法和kotlin的lambda函数很像。

  • GRADLE_USER_HOME

默认情况下Gradle会将项目依赖的jar下载到安装目录下的 .gradle\caches 中。如果想要修改位置就需要在环境变量配置GRADLE_USER_HOME 这样就会去你配置好的位置缓存jar了。
image.png
  • mavenLocal()

每次构建一个新项目都要去云端查找依赖?其实不必如此,在你的build.gradle文件中添加mavenLocal()。就可以让Gradle先去本地仓库中寻找依赖了。
如果你发现没生效 请将GRADLE_USER_HOME 配置好再试试。


image.png
  • Gradle Wrapper

Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。

  • Gradle daemon

Gradle 守护进程是一个后台进程, 它运行着繁重的构建, 然后在构建等待下一次构建的之间保持自身存在. 这使得数据和代码在下一次构建前已经准备好,并存入内存中. 这显著的提高了后续构建的性能. 启用Gradle守护进程是一种节约构建时间的廉价方式.

强烈建议在所有开发机器上启用Gradle的守护进程.但是不推荐在持续集成和构建服务器环境下启用守护进程

Gradle自动管理守护进程.如果构建环境配置为利用后台程序,如果在没有可用守护进程,就会自动启动一个守护进程,或者使用现有的空闲的兼容守护进程.如果一个守护进程在3个小时内没有使用,它将会自我终结.一旦配置开发环境为使用的守护进程,守护进程通常是隐形的,容易被遗忘的.

  • Gradle lifecycle
  1. 初始化(Initialization)

Gradle可以构建一个和多个项目。在初始化阶段,Gradle会确定哪些项目参与构建,并且为这些项目创建一个Project实例。

  1. 配置(Configuration)

在这个阶段,会配置project对象。将执行构建的所有项目的构建脚本。也就是说,会执行每个项目的build.gradle文件。

  1. 执行(Execution)

Gradle确定要在执行期间创建和配置的任务子集。子集由传递给gradle命令和当前目录的任务名称参数确定。 Gradle然后执行每个选定的任务。

  • 自定义插件 buildSrc

可以在工程基础上聚合一个buildSrc 工程 ,buildSrc工程中编写的插件可以再build.gradle的buildscript中引入,使用。

Gradle 新的依赖方式 implementation、api、compileOnly

  • implementation和api

implementation和api是取代之前的compile的,其中api和compile是一样的效果,implementation有所不同,通过implementation依赖的库只能自己库本身访问,举个例子,A依赖B,B依赖C,如果B依赖C是使用的implementation依赖,那么在A中是访问不到C中的方法的,如果需要访问,请使用api依赖

  • compile only

compile only和provided效果是一样的,只在编译的时候有效, 不参与打包

  • runtime only

runtimeOnly 和 apk效果一样,只在打包的时候有效,编译不参与

  • test implementation

testImplementation和testCompile效果一样,在单元测试和打包测试apk的时候有效

  • release implementation

releaseImplementation和releaseCompile效果相同,只在release模式和打包release包情况下有效

你可能感兴趣的:(Gradle是什么?Gradle的依赖方式有什么不同?)