当前位置:   article > 正文

Gradle相关配置_6.7.1版本的gradle build.gradle的语法

6.7.1版本的gradle build.gradle的语法

初识Gradle

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

怎么看上面都是一段很官方的解释,对于入门的人来说简直是一个噩梦般的解释(包括以前的我)。那下面我就用通俗一点语言说说我的理解。

Gradle就是工程的管理,帮我们做了依赖,打包,部署,发布,各种渠道的差异管理等工作。举个例子形容,如果我是一个做大事的少爷平时管不了这么多小事情,那Gradle就是一个贴心的秘书或者管家,把一些杂七杂八的小事情都帮我们做好了,让我们可以安心的打代码,其他事情可以交给管家管。

那有人会问,既然工作都可以交给他做,为什么还要我们去了解。我想我们要管家做事,也要下达我们的命令,我们必须知道这些命令和管家的喜好才能跟他相处和谐,不然你不知道它的脾性下错命令,那后果可是很严重的。

在以前实习的时候,我还用eclipse,那是导入一个网上的下载的module还需要一步步的import。但自从用了Android Studio后,Gradle很贴心的帮我完成了这个繁杂的工作,而且往往只需要添加一句话,这太神奇了,当时我是这样想的,下面我们也会说到这个。

分析

下面我就用自己项目中用到的Gradle慢慢分析: 
 
我们看到,每个Module都会对应有一个Gradle文件,另外还有一个主Project的Gradle文件管理全局。下面我们先看看那个叫gradle-wrapper.properties的文件:

gradle-wrapper

Wrapper是对Gradle的一层包装,便于在团队开发过程中统一Gradle构建的版本号,这样大家都可以使用统一的Gradle版本进行构建。 
 
上面我们看到的图就是Gradle提供内置的Wrapper task帮助我们自动生成Wrapper所需的目录文件。再看看我们Android项目里面自动生成的文件 
 
 
终于,我们知道这几个自动生成的文件原来是Gradle Wrapper创建出来的。

那下面我们看看gradle-wrapper.properties这个文件的作用 
 
看到项目里面的各个属性,下面再看看每个属性的作用 
 
我们其实最关心的应该是distributionUrl这个属性,他是下载Gradle的路径,它下载的东西会出现在以下的文件夹中 
 
看到了吧,这个文件夹包含了各个版本你下载的Gradle。

当我是初学者的时候老是会遇到一个问题,那就是下图: 

导入项目的时候一直会停留在这个界面,这是为什么?其实原因很简单,就是你常用项目的Gradle版本跟你新导入项目的Gradle版本不一致造成的,那怎么解决?我本人自己是这么做的:

  • 网速好或者科学上网的时候,由它自己去下载,不过下载时间有长有短,不能保证。
  • 当你在公司被限网速的时候,当然也是我最常用的,就是把你最近常用项目的gradle-wrapper.properties文件替换掉你要导入项目的该文件,基本上我是这样解决的,当然有时候也会遇到替换掉报错的情况,不过比较少。

settings.gradle

下面我们讲讲settings.gradle文件,它其实是用于初始化以及工程树的配置的,放在根工程目录下。

设置文件大多数的作用都是为了配置自工程。在Gradle众多工程是通过工程树表示的,相当于我们在Android Studio看到的Project和Module概念一样。根工程相当于Android Studio的Project,一个根工程可以有很多自工程,也就是很多Module,这样就和Android Studio定义的Module概念对应上了。 
 
我们可以看到这个项目我们添加了7个module,一一对应,如果你的项目添加了项目依赖,那就会出现在这个文件当中。

好了,我们说完settings.gradle文件之后就慢慢进入其他文件了,但是首先我们要解释一下什么是Groovy

Groovy

Groovy是基于JVM虚拟机的一种动态语言,它的语法和Java非常相似,由Java入门学习Groovy基本没有障碍。Groovy完全兼容Java,又在此基础上增加了很多动态类型和灵活的特性,比如支持密保,支持DSL,可以说它就是一门非常灵活的动态脚本语言。

一开始我总把Gradle和Groovy搞混了,现在我总把他们的关系弄清楚了。Gradle像是一个软件,而Groovy就是写这个软件的语言,这就很简单明了吧。那下面我们说到的内容都是用Groovy语法写的,但是这个知识点我就暂时不科普了,有兴趣的小伙伴可以去了解一下更深入的Groovy语法。

build.gradle(Project)

下面我们就来讲讲主的build.gradle文件: 

我们这里,分为四个标签来讲:

1.buildscript

buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等

2.ext

ext是自定义属性,现在很多人都喜欢把所有关于版本的信息都利用ext放在另一个自己新建的gradle文件中集中管理,下面我介绍一下ext是怎么用的: 
 
- 首先我们新建两个文件,分别叫build.gradle和version.gradle 
 
 
- 然后分别在两个文件中打上相应的代码 
 
- 最后在Android Studio的Terminal移动到相应的文件夹中运行task。 
我们可以很神奇的发现,当我们在build.gradle文件中输入了apply from:’version.gradle’这句话,我们就可以读取到该文件下ext的信息。

现在在项目中我也是这种方法统一管理所有第三方插件的版本号的,有兴趣的朋友也可以试试。

3.repositories

顾名思义就是仓库的意思啦,而jcenter()、maven()和google()就是托管第三方插件的平台

4.dependencies

当然配置了仓库还不够,我们还需要在dependencies{}里面的配置里,把需要配置的依赖用classpath配置上,因为这个dependencies在buildscript{}里面,所以代表的是Gradle需要的插件。

下面我们再看看build.gradle(Project)的另一部分代码 

  • allprojects

allprojects块的repositories用于多项目构建,为所有项目提供共同所需依赖包。而子项目可以配置自己的repositories以获取自己独需的依赖包。

奇怪,有人会问,为什么同一个build.gradle(Project)文件中buildscript和allprojects里面的内容基本上是一样的呢,他们的区别在哪?

  • buildscript和allprojects的作用和区别

buildscript中的声明是gradle脚本自身需要使用的资源,就是说他是管家自己需要的资源,跟你这个大少爷其实并没有什么关系。而allprojects声明的却是你所有module所需要使用的资源,就是说如果大少爷你的每个module都需要用同一个第三库的时候,你可以在 
allprojects里面声明。这下解释应该可以明白了吧。

好了,下面该说说build.gradle(Project)文件的最后一个一段代码了 
 
运行gradle clean时,执行此处定义的task。该任务继承自Delete,删除根目录中的build目录。相当于执行Delete.delete(rootProject.buildDir)。其实这个任务的执行就是可以删除生成的Build文件的,跟Android Studio的clean是一个道理。

  • build.gradle(Module)

讲完Project的build文件,就来讲讲最后也是内容最多的文件了。

  • apply plugin

首先要说下apply plugin:’×××’

这种叫做引入Gradle插件,而Gradle插件大致分为分为两种:

  • apply plugin:’×××’:叫做二进制插件,二进制插件一般都是被打包在一个jar里独立发布的,比如我们自定义的插件,再发布的时候我们也可以为其指定plugin id,这个plugin id最好是一个全限定名称,就像你的包名一样;
  • apply from:’×××’:叫做应用脚本插件,其实这不能算一个插件,它只是一个脚本。应用脚本插件,其实就是把这个脚本加载进来,和二进制插件不同的是它使用的是from关键字.后面紧跟的坫一个脚本文件,可以是本地的,也可以是网络存在的,如果是网络上的话要使用HTTP URL. 
    虽然它不是一个真正的插件,但是不能忽视它的作用.它是脚本文件模块化的基础,我们 
    可以把庞大的脚本文件.进行分块、分段整理.拆分成一个个共用、职责分明的文件,然后使 
    用apply from来引用它们,比如我们可以把常用的函数放在一个Utils.gradle脚本里,供其他脚本文件引用。示例中我们把 App的版本名称和版本号单独放在一个脚本文件里,清晰、简单、方便、快捷.我们也可以使用自动化对该文件自动处理,生成版本。

 

 在 build.gradle 中引入 springboot插件

  1. plugins {
  2. id "org.springframework.boot" version "2.0.3.RELEASE"
  3. }

相当于 maven中的

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. </build>

projects、tasks

Gradle 里的任何东西都是基于这两个基础概念:

  • projects ( 项目 )
  • tasks ( 任务 )

每一个构建都是由一个或多个 projects 构成的. 一个 project 到底代表什么依赖于你想用 Gradle 做什么. 举个例子, 一个 project 可以代表一个 JAR 或者一个网页应用.

每一个 project 是由一个或多个 tasks 构成的. 一个 task 代表一些更加细化的构建. 可能是编译一些 >

自定义任务

首先应该明白,gradle自带了很多task。

在build.gradle中添加自定义task很简单,代码如下:

  1. //自定义一个方法,这里是创建目录
  2. def createDir = {
  3. path ->
  4. File file = new File(path);
  5. if (!file.exists()){
  6. file.mkdirs();
  7. }
  8. }
  9. //自定义第一个task任务
  10. task makeGroovyDir(){
  11. def paths = ["src/main/groovy"];
  12. doFirst {
  13. paths.forEach(createDir);
  14. }
  15. }
  16. //自定义第二个task任务
  17. task makeJavaDir(){
  18. dependsOn 'makeGroovyDir' //该任务依赖于某个任务
  19. def paths = ["src/main/java2"];
  20. doFirst {
  21. paths.forEach(createDir);
  22. }
  23. }

运行图如下:

 

在build.gradle文件中添加 task 打印出依赖的jar包路径

task showDir {

  doLast {

       configurations.compile.asFileTree.each{

            println it.absoluteFile

       }

   }

}

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号