Gradle学习笔记

gradle

Posted by Monk on April 3, 2020

Gradle

安装Gradle

  1. 安装JDK,Gradle 需要运行在一个 Java 环境里
  2. Gradle 自带 Groovy 库,所以没必要安装 Groovy. 任何已经安装的 Groovy 会被 Gradle 忽略。
  3. 去官网下载zip包,解压到一个目录。
    3.1 如果是Windows系统:设置GRADLE_HOME环境变量,然后在Path环境变量中加入GRADLE_HOME/bin
    3.2 如果是Linux系统:设置 ~/.bash_profile 的PATH:export PATH=$PATH:/home/installPackage/gradle/gradle-4.10.2/bin
  4. 测试:gradle -v,输出一下结果代表安装成功了 ```

    Gradle 4.8 – ———————————————————- Build time: 2018-06-04 10:39:58 UTC Revision: 9e1261240e412cbf61a5e3a5ab734f232b2f887d

    Groovy: 2.4.12 Ant: Apache Ant(TM) version 1.9.11 compiled on March 23 2018 JVM: 1.8.0_181 (Oracle Corporation 25.181-b13) OS: Windows 10 10.0 amd64 ``` —

    构建脚本基础

  5. Projects(项目) 和 tasks(任务)
  6. Hello world:你可以通过 gradle 命令运行一个 Gradle 构建.gradle 命令会在当前目录中查找一个叫 build.gradle 的文件. 我们称这个 build.gradle 文件为一个构建脚本 (build script), 但是严格来说它是一个构建配置脚本 (build configuration script).这个脚本定义了一个 project 和它的 tasks
      task hello{
      	doLast {
      		println 'Hello world!'
      	}
      }
    

    执行 gradle -q hello, 那么命令行就会输出 Hello world!

  7. 快捷的任务定义,利用 « 来代替doLast
    task hello << {
      println 'Hello world!'
    }
    
  8. 构建脚本代码
    task upper << {
     String someString = 'mY_nAmE'
     println "Original: " + someString
     println "Upper case: " + someString.toUpperCase()
    }
    
  9. 任务依赖
    task hello << {
      println 'Hello world!'
    } 
    task intro(dependsOn: hello) << {
      println "I'm Gradle"
    }
    

    执行:gradle -q intro 输出:

    Hello world!
    I'm Gradle
    
  10. 动态任务
    4.times { counter ->
         task "task$counter" << {
         println "I'm task number $counter"
     }
    }
    

执行:gradle -q task0 -> I’m task number 1
执行:gradle -q task2 -> I’m task number 2

  1. 使用已经存在的任务
    4.times { counter ->
         task "task$counter" << {
         println "I'm task number $counter"
     }
    } 
    task0.dependsOn task2, task3
    

    执行:gradle -q task0:输出

    I'm task number 2
    I'm task number 3
    I'm task number 0
    

    – 给一个已经存在的任务加入行为.

    task hello << {
      println 'Hello Earth'
     } 
     hello.doFirst {
      println 'Hello Venus'
     } 
     hello.doLast {
      println 'Hello Mars'
     } 
     hello << {
      println 'Hello Jupiter'
     }
    

    执行:gradle -q task0:输出

    Hello Venus
    Hello Earth
    Hello Mars
    Hello Jupiter
    
  2. 自定义任务属性
    task myTask {
     ext.myProperty = "myValue"
    } 
    task printTaskProperties << {
     println myTask.myProperty
    }
    

    执行:gradle -q printTaskProperties:输出 -> myValue

  3. 默认任务
    defaultTasks 'clean', 'run'
    task clean << {
     println 'Default Cleaning!'
    } 
    task run << {
     println 'Default Running!'
    } 
    task other << {
     println "I'm not a default task!"
    }
    

    执行:gradle -q 默认执行clean和run

  4. 通过 DAG 配置
    task distribution << {
    println "We build the zip with version=$version"
    } 
    task release(dependsOn: 'distribution') << {
    println 'We release now'
    } 
    gradle.taskGraph.whenReady {taskGraph ->
    if (taskGraph.hasTask(release)) {
        version = '1.0'
    } else {
        version = '1.0-SNAPSHOT'
    }
    }
    

    执行:gradle -q distribution 输出:We build the zip with version=1.0-SNAPSHOT
    执行:gradle -q release 输出:
    We build the zip with version=1.0
    We release now

  5. 外部依赖,加入Maven仓库
    /*指定仓库为Maven仓库*/
    repositories {
       mavenCentral()
    }
    /*依赖包*/
    dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
    }
    
  6. 定制项目:定制 MANIFEST.MF 文件
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    version = '1.0'
    jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
    }
    }
    
  7. 发布 JAR 文件
    uploadArchives {
    repositories {
        flatDir {
            dirs 'repos'
        }
    }
    }
    

依赖管理的基础知识

  1. 什么是依赖管理
    • Gradle需要了解你的项目需要构建或运行的东西,以便找到它们.我们称这些传入的文件为项目的 dependencies(依赖项).
    • Gradle需要构建并上传你的项目产生的东西.我们称这些传出的项目文件为 publications(发布项).
  2. 声明你的依赖
    apply plugin: 'java'
    repositories {
        mavenCentral()
    } 
    dependencies {
        compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
        testCompile group: 'junit', name: 'junit', version: '4.+'
    }
    
  3. 依赖配置
    • compile 用来编译项目源代码的依赖.
    • runtime 在运行时被生成的类使用的依赖. 默认的, 也包含了编译时的依赖.
    • testCompile 编译测试代码的依赖. 默认的, 包含生成的类运行所需的依赖和编译源代码的依赖.
    • testRuntime 运行测试所需要的依赖. 默认的, 包含上面三个依赖
  4. 外部的依赖
  5. 仓库
  6. 发布 artifacts

    编写构建脚本

  7. 标准项目属性:Project 对象提供了一些标准的属性, 您可以在构建脚本中很方便的使用他们. 下面列出了常用的属性
Name Type Default Value
project Project Project 实例对象
name String 项目目录的名称
path String 项目的绝对路径
description String 项目描述
projectDir File 包含构建脚本的目录
build File projectDir/build
group Object 未具体说明
version Object 未具体说明
ant AntBuilder Ant实例对象
  1. 声明变量 2.1. 局部变量:局部变量使用关键字 def 来声明, 其只在声明它的地方可见
    def dest = "dest"
    task copy(type: Copy) {
    	from "source"
    	into dest
    }
    

    2.2. 扩展属性:使用 ext 来定义

    apply plugin: "java"
    ext {
    	springVersion = "3.1.0.RELEASE"
    	emailNotification = "build@master.org"
    } 
    sourceSets.all { ext.purpose = null }
    sourceSets {
    	main {
    		purpose = "production"
    	} 
    	test {
    		purpose = "test"
    	}
    	plugin {
    		purpose = "production"
    	} 
    } 
       
    task printProperties << {
    	println springVersion
    	println emailNotification
    	sourceSets.matching { it.purpose == "production" }.each { println it.name }
    }
    

    Gradle常用命令

    apply plugin: ‘java’,加入了java插件

  2. gradle build :Gradle 将会编译和测试你的代码,并生成一个包含所有类与资源的 JAR 文件
  3. gradle clean :删除 build 目录和所有为build生成的文件
  4. gradle assemble :编译并打包你的代码, 但是并不运行单元测试.其他插件会在这个任务里加入更多的步骤.举个例子,如果你使用 War 插件,这个任务还将根据你的项目生成一个 WAR 文件
  5. gradle check :编译并测试你的代码. 其他的插件会加入更多的检查步骤.举个例子, 如果你使用 checkstyle 插件, 这个任务将会运行 Checkstyle 来检查你的代码.
  6. 选择执行构建:gradle -q -b subdir/myproject.gradle hello 执行myproject.gradle 文件中的 hello task(可以使用-p参数来代替-b参数)
  7. gradle projects :列出项目列表
  8. gradle -q tasks [-all] :列出所有的任务列表,如果加入-all参数,则会输出更多的人物信息
  9. gradle -q help –task someTask :获取someTask的任务的具体信息
  10. gradle -q dependencies :获取依赖信息
  11. gradle properties :获取项目属性列表,如:gradle -q api:properties 获取api项目的属性信息
  12. gradle hello –profile :–profile 参数可以收集一些构建期间的信息并保存到 build/reports/profile 目录下. 并且会以构建时间命名这些文件
  13. gradle –gui :打开Gradle的图形用户界面