【工具学习】Gradle - hippowc/hippowc.github.io GitHub Wiki

简介

Gradle是一个基于 JVM 的富有突破性构建工具。Gradle 的核心在于基于 Groovy 的丰富而可扩展的域描述语言(DSL)。 Groovy 通过声明性的语言元素将基于声明的构建推向下层,你可以按你想要的方式进行组合。 这些元素同样也为支持 Java, Groovy,OSGi,Web 和 Scala 项目提供了基于约定的构建。

基础概念

Projects 和 task

任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。

每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。

第一个尝试

你可以通过在命令行运行 gradle 命令来执行构建,gradle 命令会从当前目录下寻找 build.gradle 文件来执行构建。我们称 build.gradle 文件为构建脚本。这个构建脚本定义了一个 project 和一些默认的 task。

task hello {
    doLast {
        println 'Hello world!'
    }
}
// 命令
gradle -q hello

当执行 gradle hello 的时候, Gralde 便会去调用 hello 这个任务来执行给定操作。这些操作其实就是一个用 groovy 书写的闭包。

快速定义

task hello << {
    println 'Hello world!'
}

任务依赖

在两个任务之间指明依赖关系

task hello << {
    println 'Hello world!'
}
task intro(dependsOn: hello) << {
    println "I'm Gradle"
}

定义默认任务

defaultTasks 'clean', 'run'
task clean << {
    println 'Default Cleaning!'
}
task run << {
    println 'Default Running!'
}
task other << {
    println "I'm not a default task!"
}

Java构建

Gradle 是一个通用工具。它可以通过脚本构建任何你想要实现的东西,真正实现开箱即用。

大部分 Java 项目基本流程都是相似的:编译源文件,进行单元测试,创建 jar 包。使用 Gradle 做这些工作不必为每个工程都编写代码。Gradle 已经提供了完美的插件来解决这些问题。插件就是 Gradle 的扩展,简而言之就是为你添加一些非常有用的默认配置。

Java 插件为工程定义了许多默认值,如Java源文件位置。如果你遵循这些默认规则,那么你无需在你的脚本文件中书写太多代码。当然,Gradle 也允许你自定义项目中的一些规则,实际上,由于对 Java 工程的构建是基于插件的,那么你也可以完全不用插件自己编写代码来进行构建。

想用 Java 插件,只需增加如下代码到你的脚本里。

apply plugin: 'java'

实践 groovy 项目

初始化脚手架

  • basic 啥都没有
  • application 带有标准目录结构,带一个main函数
  • lib 带有标准目录结构

然后可以选择语言:支持java,groovy,c++,kotlin等

build.gradle

通过脚手架,其实配置都已经帮忙配置好了,可以看下整体配置

// 使用插件
plugins {
    // groovy 项目编译
    id 'groovy'
    // 支持将项目编译成为一个命令行工具
    id 'application'
}
// 定义仓库,可以定义maven,ivy等仓库,url中写入地址
repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    maven {
        url "http://xxxx"
    }
    jcenter()
}

// 
dependencies {
    // 引入项目依赖
    implementation 'org.codehaus.groovy:groovy-all:3.0.0'
    // 引入测试依赖
    testImplementation 'org.spockframework:spock-core:1.3-groovy-2.5'
}

进行编译和打包

  • gradle -v 查看版本
  • gradle [task] 执行特定task gradle task [subTask] 执行任务的子任务,一般都有单独的子任务
  • gradle build 构建 最常用
  • gradle build -x test 构建跳过测试
  • gradle -m build 试构建
  • gradlle tasks --all 现实所有任务以及依赖
  • gradle clean 清除build目录
  • gradle help dependencies 查看项目依赖

关于编译后的文件

gradle编译后的文件都会放在build文件夹下,对于application插件实现的可执行jar包,放在了build下的distribution下,会有zip和tar两个压缩包,而且可执行文件都已经写好了,真的tmd方便,作为技术人员,到好用的工具就兴奋