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