Gradle 基础入门

 

简介

Gradle 是一种开源自动化构建工具,支持多语言环境,受 Ant、Maven 思想的影响,集二者之大成,相比 Ant 的不规范,Maven 的配置复杂、生命周期限制严重,Gradle 既规范也更灵活,可以使用DSL (领域特定语言,如Groovy 或 Kotlin)编写构建脚本,脚本更短小精悍

它的特性有:

  • 高度定制化:模块化可扩展,更灵活
  • 构建迅速:支持并行构建,自动复用之前任务构建的结果以提高效率
  • 功能强大:支持多语言环境,包含 Java、Android、C++、Groovy、Javascript 等项目的构建

Ant、Maven 有的 Gradle也有,Gradle有的它们不一定有;

Ant、Maven能干的,Gradle 都能干,而且干得更好

安装

下载地址:https://gradle.org/releases/

以 Linux 举例:


cd /opt
wget https://services.gradle.org/distributions/gradle-6.4.1-bin.zip
sudo unzip -oq gradle-6.4.1-bin.zip #解压到/opt/gradle-6.4.1
#切换root权限,设置环境变量
sudo su -
cat >> /etc/profile <<EOF
export PATH=\$PATH:/opt/gradle-6.4.1/bin
export GRADLE_USER_HOME=/opt/gradle-6.4.1 #Gradle的缓存会存在此目录下的caches中
EOF
exit
source /etc/profile

#测试
hellxz@debian:~$ gradle -v

------------------------------------------------------------
Gradle 6.4.1
------------------------------------------------------------

Build time:   2020-05-15 19:43:40 UTC
Revision:     1a04183c502614b5c80e33d603074e0b4a2777c5

Kotlin:       1.3.71
Groovy:       2.5.10
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          11.0.7 (Debian 11.0.7+10-post-Debian-3deb10u1)
OS:           Linux 4.19.0-9-amd64 amd64

hello world

build.gradle

task hello {
    println "Hello World!"
}

gradle -q hello

` -q ` 参数的作用是静默输出,使输出更加清晰

以上脚本定义了一个独立的 task 叫做 hello,并且加入了一个 action,当执行 gradle hello 时,Gradle 执行叫做 hello 的 task,即执行了我们提供的 action。

这个 action 是一个包含了一些 Grovvy 代码的闭包(Closure)。

task 块内可以定义前置、后置执行的方法(闭包)doFirstdoLast, 注意,定义多个时不能保证执行顺序。

构建基础

projects 和 tasks

projects 和 tasks 是 Gradle 中最重要的两个概念。

任何一个 Gradle 构建都是由一个 project 或多个 projects 组成。每个 project 可以是一个 jar 包或 war 应用,也可以是一个由许多其他项目中产生的 jar 工程的 zip 压缩包。

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

换种说法,project 相当于一个构建工程的一个模块,task 是模块中的要给操作。

调用 Grovvy

在 build.gradle (可以才能为 build script,构建配置脚本)中调用 Groovy 的类库:

build.gradle

task upper {
      String str = 'this is a simple test'
      println "原始值:" + str
      println "转大写后:" + str.toUpperCase()
}

gradle -q upper

Hello World
原始值:this is a simple test
转大写后:THIS IS A SIMPLE TEST

定义项目 version/group

在 Maven 中,可以明确定义项目版本,构建时会将这个版本包含在 war 或 jar 等制品的文件名称中,推送到 Maven 私服中也需要设置 group artifactId version 信息,那么 Gradle 中如何定义呢?

Gradle 中,对应 Maven 的三个参数,将 artifactId 变成了 rootProject.name,那么只需额外定义 group 与 version

在 build.gradle 中设置

version = "0.0.1"
group = "com.cnblogs.hellxz"

Gradle 配置中还有一个特殊的配置文件,gradle.properties,我们可以在里边配置变量供 build.gradle 读取

version=0.0.1
group=com.cnblogs.hellxz

Java 构建入门

生成Java项目

使用 Maven 时我们可以通过以下命令来创建一个简单的 Java 项目

mvn archetype:generate \
  -DgroupId=xxx \
  -DartifactId=yyy \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DarchetypeCatalog=local \
  -DinteractiveMode=false

Maven 有的 Gradle 自然也不会落下,我们可以使用 init task来初始化一个 Java 项目

chengchao@web1:~/temp/gradle_temp> gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Swift
Enter selection (default: Java) [1..5] 3

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

Project name (default: gradle_temp):
Source package (default: gradle_temp):

> Task :init
Get more help with your project: https://docs.gradle.org/6.4.1/userguide/tutorial_java_projects.html

BUILD SUCCESSFUL in 50s
2 actionable tasks: 2 executed

]
chengchao@web1:~/temp/gradle_temp> ls
build.gradle  gradle  gradlew  gradlew.bat  settings.gradle  src
chengchao@web1:~/temp/gradle_temp> tree src
src
├── main
│   ├── java
│   │   └── gradle_temp
│   │       └── App.java
│   └── resources
└── test
    ├── java
    │   └── gradle_temp
    │       └── AppTest.java
    └── resources

8 directories, 2 files

参考:

EOF


Power by TeXt.