乐趣区

关于java:最新版gradle安装使用简介

简介

gradle 的最新版本是 6.7,从 2009 年的第一个版本,到 2020 年的 6.7,曾经倒退了 11 年了。gradle 是作为 android 的官网构建工具引入的,除了 java,它还可能反对多种语言的构建,所以用处十分宽泛。

gradle 是开源的构建工具,你能够应用 groovy 或者 kotlin 来编写 gradle 的脚本,所以说 gradle 是一个十分弱小的,高度定制化的和十分疾速的构建工具。

依据我的理解,尽管 gradle 十分弱小,然而对于 java 程序员来说,个别还是都应用的 maven,或者同时提供 maven 和 gradle 两种构建形式。

为什么会这样呢?集体感觉有两个起因:

第一个起因是 gradle 安装文件和依赖包的网络环境,如果单单依附国内的网络环境的话,十分难装置实现。

第二个起因就是 gradle 中须要本人编写构建脚本,绝对于纯配置的脚本来说,比较复杂。

装置 gradle 和解决 gradle 装置的问题

gradle 须要 java8 的反对,所以,你首先须要装置好 JDK8 或者以上的版本。

❯ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

装置 gradle 有两种形式,一种就是最简略的从官网下面下载安装包。而后解压在某个目录,最初将 PATH 指向该目录下的 bin 即可:

❯ mkdir /opt/gradle
❯ unzip -d /opt/gradle gradle-6.7-bin.zip
❯ ls /opt/gradle/gradle-6.7
LICENSE  NOTICE  bin  README  init.d  lib  media

export PATH=$PATH:/opt/gradle/gradle-6.7/bin

如果你想应用包管理器,比方 MAC 下面的 brew 来进行治理的话,则能够这样装置:

brew install gradle

然而这样装置很有可能在下载 gradle 安装包的时候卡住。

==> Downloading https://services.gradle.org/distributions/gradle-6.4.1-bin.zip
##O#- #

怎么办呢?

这时候咱们须要自行下载 gradle-6.4.1-bin.zip 安装包,而后将其放入 http 服务器中,让这个压缩包能够通过 http 协定来拜访。

简略点的做法就是将这个 zip 文件拷贝到 IDEA 中,利用 IDEA 本地服务器的预览性能,取得 zip 的 http 门路,比方:http://localhost:63345/gradle/gradle-6.7-all.zip.

接下来就是最精彩的局部了,咱们须要批改 gradle.rb 文件:

brew edit gradle

应用下面的命令能够批改 gracle.rb 文件,咱们替换掉上面的一段:

  homepage "https://www.gradle.org/"
  url "https://services.gradle.org/distributions/gradle-6.7-all.zip"
  sha256 "0080de8491f0918e4f529a6db6820fa0b9e818ee2386117f4394f95feb1d5583"

url 替换成为 http://localhost:63345/gradle/gradle-6.7-all.zip,而 sha256 能够应用 sha256sum gradle-6.7-all.zip 这个命令来获取。

替换之后,从新执行 brew install gradle 即可装置实现。

装置结束之后,咱们应用 gradle - v 命令能够验证是否装置胜利:

gradle -v

Welcome to Gradle 6.7!

Gradle 个性

gradle 作为一种新的构建工具,因为它是依赖于 groovy 和 kotlin 脚本的,基于脚本的灵活性,咱们通过自定义脚本基本上能够做任何想要的构建工作。

尽管说 gradle 能够做任何构建工作,然而 gradle 当初还是有肯定的限度,那就是我的项目的依赖我的项目前只反对于 maven 和 Ivy 兼容的存储库以及文件系统。

gradle 通过各种预约义的插件,能够轻松的构建通用类型的我的项目,并且反对自定义的插件类型。

另外一个十分重要的个性是 gradle 是以工作为根底的,每一个 build 都蕴含了一系列的 task,这些 task 又有各自的依赖关系,而后这些 task 一起形成了一个有向无环图 Directed Acyclic Graphs (DAGs)。

有了这个 DAG,gradle 就能够决定各个 task 的程序,并执行他们。

咱们看两个 task DAG 的例子,一个是通用的 task,一个是专门的编译 java 的例子:

task 能够依赖 task,咱们看个例子:

task hello {
    doLast {println 'Hello world!'}
}
task intro {
    dependsOn hello
    doLast {println "I'm Gradle"}
}

一个 task 能够蕴含 Actions,inputs 和 Outputs。依据须要这些类型能够自由组合。

规范 task

Gradle 蕴含了上面 7 种规范的 task:

  • clean:用来删除 build 目录和外面的所有。
  • check:这是一个生命周期工作,通常做一些验证工作,比方执行测试工作等。
  • assemble:这是一个生命周期工作,用来生成可散发的文件,比方 jar 包。
  • build:也是一个生命周期工作,用来执行测试工作和生成最初的 production 文件。通常咱们不在 build 中间接做任何特定的工作操作,它个别是其余工作的组合。
  • buildConfiguration:组装 configuration 中指定的 archives。
  • uploadConfiguration:除了执行 buildConfiguration 之外,还会执行上传工作。
  • cleanTask:删除特定的某个 task 的执行后果。

Build phases

一个 gradle 的 build 蕴含了三个 phases:

  • Initialization:初始化阶段。gradle 反对一个或者多个 project 的 build。在初始化阶段,gradle 将会判断到底有哪些 project 将会执行,并且为他们别离创立一个 project 实例。
  • Configuration:配置阶段。gradle 将会执行 build 脚本,而后剖析出要运行的 tasks。
  • Execution:执行阶段。gradle 将会执行 configuration 阶段剖析进去的 tasks。

Gradle Wrapper

下面讲的是 gradle 的手动装置,如果是在多人工作的环境中应用了 gradle,有没有什么方法能够不必手动装置 gradle 就能够主动运行 gradle 程序呢?

办法当然有,那就是 gradle wrapper:

gradle wrapper 是一个工具,通过它咱们能够不便的对本地的 gradle 进行治理。

上图列出了 gradle wrapper 的工作流程,第一步是去下载 gradle 的安装文件,第二步是将这个安装文件解压到 gradle 的用户空间,第三步就是应用这个解压进去的 gradle 了。

咱们先看下怎么创立 gradle wrapper:

尽管 Gradle wrapper 的作用是帮咱们下载和装置 gradle,然而要生成 gradle wrapper 须要应用 gradle 命令才行。也就是说有了 wrapper 你能够依照胜利 gradle,有了 gradle 你才能够生成 gradle wrapper。

如果咱们曾经手动依照好了 gradle,那么能够执行上面的命令来生成 gradle wrapper:

$ gradle wrapper
> Task :wrapper

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

先看下生成进去的文件构造:

.
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
└── gradlew.bat

gradle/wrapper/gradle-wrapper.properties 是 wrapper 的配置文件,咱们看下外面的内容:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

其中 distributionUrl 就是咱们要下载的 gradle 的门路,其余的配置是 gradle 的装置目录。

一般来说有两种安装文件类型:bin 和 all。bin 和 all 的区别在于,bin 只有安装文件,而 all 还蕴含了 gradle 的文档和样例代码。

咱们能够通过 –distribution-type 参数来批改安装文件的类型。此外还有 –gradle-version,–gradle-distribution-url 和 –gradle-distribution-sha256-sum 这几个参数能够应用。

$ gradle wrapper --gradle-version 6.7 --distribution-type all
> Task :wrapper

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

除了配置文件之外,咱们还有 3 个文件:

  • gradle-wrapper.jar:wrapper 业务逻辑的实现文件。
  • gradlew, gradlew.bat:应用 wrapper 执行 build 的执行文件。也就是说咱们能够应用 wrapper 来执行 gradle 的 build 工作。

wrapper 的应用

咱们能够这样应用 gradlew, 来执行 build:

gradlew.bat build

留神,如果你是第一次在我的项目中执行 build 命令的话,将会主动为你下载和装置 gradle。

wrapper 的降级

如果咱们想要降级 gradle 的版本,也很简略:

./gradlew wrapper --gradle-version 6.7

或者间接批改 gradle-wrapper.properties 也能够。

一个简略的 build.gradle

咱们看一个非常简单的 gradle 的例子:

plugins {id 'application'}

repositories {jcenter() 
}

dependencies {
    testImplementation 'junit:junit:4.13' 

    implementation 'com.google.guava:guava:29.0-jre' 
}

application {mainClass = 'demo.App'}

下面咱们须要装置一个 application plugin,应用的是 jcenter 的依赖仓库,还指定了几个具体的依赖项。最初,指明了咱们应用程序的 mainClass。

gradle 应用 maven 仓库

build.gradle 中的 repositories 指明的是应用的仓库选项。

默认状况下 gradle 有本人的本地仓库, 个别在~/.gradle 目录上面,如果咱们之前用的是 maven 仓库,那么在本地的 maven 仓库中曾经存在了很多依赖包了,如何重用呢?

咱们能够这样批改 repositories:

    mavenLocal()
    mavenCentral()

这样的话, 就会优先从 maven 的仓库中查找所需的 jar 包。

总结

本文只是一个很简略的 gradle 介绍,让大家对 gradle 有一个根本的理解,前面咱们会具体的介绍 gradle 的各种用法,敬请期待。

本文已收录于 http://www.flydean.com/gradle-kick-off/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!

退出移动版