四时宝库

程序员的知识宝库

使用docker搭建学习gradle的环境(docker搭建gerrit)

docker hub上gradle的地址

https://hub.docker.com/_/gradle

拉取镜像

docker pull gradle:6.5.1

使用说明

先进入代码目录,再运行:

docker run --rm -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:6.5.1 gradle <gradle-task>

<gradle-task> 是要运行的task

查看镜像jdk版本

docker run --rm -it -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:6.5.1 bash 
gradle@020ecee243ef:~/project$ java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.262-b10, mixed mode)

可以看到这个版本是jdk 1.8的,如果需要更高的,到前文写到的地址使用其他tag,到目前(2020-12-29)最高的是jdk15的(gradle:6.7.1-jdk15

查看gradle版本

和上面看jdk版本一样,进入容器后:

gradle@5d7bc620164a:~/project$ gradle -v
Welcome to Gradle 6.5.1!
Here are the highlights of this release:
 - Experimental file-system watching
 - Improved version ordering
 - New samples
For more details see https://docs.gradle.org/6.5.1/release-notes.html
------------------------------------------------------------
Gradle 6.5.1
------------------------------------------------------------
Build time:   2020-06-30 06:32:47 UTC
Revision:     66bc713f7169626a7f0134bf452abde51550ea0a
Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_262 (AdoptOpenJDK 25.262-b10)
OS:           Linux 4.19.121-linuxkit amd64

Hello world

gradle 命令会从当前目录下寻找 build.gradle 文件来执行构建

新建文件夹gradle-test

% mkdir gradle-test
% cd gradle-test
% pwd
/Volumes/RamDisk/gradle-test

准备build.gradle 文件:

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

运行方式1:

% docker run --rm -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:6.5.1 gradle -q hello
Hello world!

运行方式2,先运行个容器,再进入:

% docker run --rm -it -u gradle -v "$PWD":/home/gradle/project -w /home/gradle/project gradle:6.5.1 bash
gradle@fcd20be7fcdd:~/project$ gradle -q hello
Hello world!

在此期间能看到一些进度

上面的脚本定义了一个叫做 hello 的 task,并且给它添加了一个动作。当执行 gradle hello 的时候, Gralde 便会去调用 hello 这个任务来执行给定操作。这些操作其实就是一个用 groovy 书写的闭包

更简洁的 hello 任务

build.gradle 文件:

task hello {
    println 'Hello world!'
}

再下面是一些例子,需要继续学习gradle可以去查查官方资料很全。

doLast 的省略,有时会有不一样的结果,下面的例子如果放一起,并没有加doLast,结果会不一样

例子-toUpperCase

task upper {
    String someString = 'mY_nAmE'
    println "Original: " + someString
    println "Upper case: " + someString.toUpperCase()
}
gradle@fcd20be7fcdd:~/project$ gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME

例子-times

task count {
    4.times { print "$it " }
}
gradle@fcd20be7fcdd:~/project$ gradle -q count
Original: mY_nAmE
Upper case: MY_NAME

例子-任务依赖

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

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


无顺序要求,即不必首先声明被依赖的 task。

task taskX(dependsOn: 'taskY') {
    println 'taskX'
}
task taskY {
    println 'taskY'
}
gradle@fcd20be7fcdd:~/project$ gradle -q taskX
taskX
taskY

例子-动态任务

4.times { counter ->
    task "task$counter" {
        doLast {
            println "I'm task number $counter"
        }
    }
}
gradle@fcd20be7fcdd:~/project$ gradle -q task2
I'm task number 2

例子-添加依赖

为已存在的任务增加行为

4.times { counter ->
    task "task$counter" {
        doLast{
            println "I'm task number $counter"
        }
    }
}
task0.dependsOn task2, task3
gradle@fcd20be7fcdd:~/project$ gradle -q task0
I'm task number 2
I'm task number 3
I'm task number 0

例子-增加任务行为

task hello {
    doLast{
        println 'Hello Earth'
    }
}
hello.doFirst {
    println 'Hello Venus'
}
hello.doLast {
    println 'Hello Mars'
}
hello {
    doLast{
        println 'Hello Jupiter'
    }
}
gradle@fcd20be7fcdd:~/project$ gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter

doFirst 和 doLast 可以进行多次调用。他们分别被添加在任务的开头和结尾。当任务开始执行时这些动作会按照既定顺序进行。

例子-以属性的方式访问任务

每个任务都是一个脚本的属性

task hello {
    doLast{
        println 'Hello world!'
    }
}
hello.doLast {
    println "Greetings from the $hello.name task."
}
gradle@fcd20be7fcdd:~/project$ gradle -q hello
Hello world!
Greetings from the hello task.

例子-为任务增加自定义属性

task myTask {
    ext.myProperty = "myValue"
}

task printTaskProperties {
    doLast{
        println myTask.myProperty
    }
}
gradle@fcd20be7fcdd:~/project$ gradle -q printTaskProperties
myValue

定义默认任务

defaultTasks 'clean', 'run'
task clean {
    doLast{
        println 'Default Cleaning!'
    }
}
task run  {
    doLast{
        println 'Default Running!'
    }
}
task other {
    doLast{
        println "I'm not a default task!"
    }
}
gradle@fcd20be7fcdd:~/project$ gradle -q
Default Cleaning!
Default Running!

这与直接调用 gradle clean run 效果是一样的

标准目录结构

标准目录结构如下:

project  
    +build  
    +src/main/java  
    +src/main/resources  
    +src/test/java  
    +src/test/resources  

Gradle 默认会从 src/main/java 搜寻打包源码,在 src/test/java 下搜寻测试源码。并且 src/main/resources 下的所有文件都会被打包,所有 src/test/resources 下的文件 都会被添加到类路径用以执行测试。所有文件都输出到 build 下,打包的文件输出到 build/libs 下。

构建项目

gradle build

例子-一个基本 Java 项目

build.gradle


brapply plugin: 'java'

定义一个 Java 项目只需如此而已。这将会为你添加 Java 插件及其一些内置任务。

添加了哪些任务?

gradle tasks

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接