第一个 Gradle 脚本及简单命令
代码语言:javascript复制task helloworld {
doLast {
print 'Hello world!'
}
}
/* <<这种方式将在 Gradle5.0 中删除,不建议使用 */
task helloworldSort << {
print 'Hello world!'
}
task startSession << {
println 'startSession'
chant()
}
def chant() {
/*使用 gradle -q task名称 的方式运行会没有效果
* 使用 gradle task名称 的方式运行才有效果*/
ant.echo(message: 'Ant 任务的引用')
println 'chant'
}
3.times {
task "yayGradle$it" << {
println '动态任务的定义' it
}
}
/* dependsOn 说明 task 之间的依赖关系,Gradle 会确保被依赖的 task 总会在定义该依赖的 task 之前执行 */
yayGradle0.dependsOn startSession
yayGradle2.dependsOn yayGradle1, yayGradle0
/* 任务执行的顺序 startSession -> yayGradle0 -> yayGradle1 -> yayGradle2 -> groupTherapy */
task groupTherapy(dependsOn: yayGradle2) << {
println 'groupTherapy'
}
gradle -q task名称
使Gradle只显示对应 task 相关信息
task
代表一个任务 doLast
代表 task 最后执行的一个 action doLast
可以使用 <<
更简单的来表达
gradle task --all
查询所有的可以知晓的任务
www.coderknock.com$ gradle task --all
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
at build_88ntbwtq2gz525a8g5uy5gmc2.run(D:WindowsDesktopLearnGradleHelloWorldbuild.gradle:7)
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
构建的 setip 任务,帮助初始化 Gradle 的构建(比如生成 build.gradle 文件)
代码语言:javascript复制Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]
帮助任务组,这里列出了任务的名称以及对应描述
代码语言:javascript复制Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'HelloWorld'.
components - Displays the components produced by root project 'HelloWorld'. [incubating]
dependencies - Displays all dependencies declared in root project 'HelloWorld'.
dependencyInsight - Displays the insight into a specific dependency in root project 'HelloWorld'.
dependentComponents - Displays the dependent components of components in root project 'HelloWorld'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'HelloWorld'. [incubating]
projects - Displays the sub-projects of root project 'HelloWorld'.
properties - Displays the properties of root project 'HelloWorld'.
tasks - Displays the tasks runnable from root project 'HelloWorld'.
没有分类的任务【目前列出的是我们刚刚声明的任务,自己生命的任务也可以设置任务组】,后期会学习如何添加描述信息
代码语言:javascript复制Other tasks
-----------
groupTherapy
helloworld
helloworldSort
startSession
yayGradle0
yayGradle1
yayGradle2
BUILD SUCCESSFUL
Total time: 1.29 secs
每个构建脚本都会默认暴露 Help tasks 任务组,如果某个 task 不属于一个任务组,就会显示在 Other tasks 中。
任务执行
代码语言:javascript复制www.coderknock.com$ gradle yayGradle0 groupTherapy
:startSession
startSession
[ant:echo] Ant 任务的引用
chant
:yayGradle0
动态任务的定义task ':yayGradle0'
:yayGradle1
动态任务的定义task ':yayGradle1'
:yayGradle2
动态任务的定义task ':yayGradle2'
:groupTherapy
groupTherapy
BUILD SUCCESSFUL
Total time: 1.61 secs
代码语言:javascript复制www.coderknock.com$ gradle groupTherapy
:startSession
startSession
[ant:echo] Ant 任务的引用
chant
:yayGradle0
动态任务的定义task ':yayGradle0'
:yayGradle1
动态任务的定义task ':yayGradle1'
:yayGradle2
动态任务的定义task ':yayGradle2'
:groupTherapy
groupTherapy
BUILD SUCCESSFUL
Total time: 1.614 secs
我们可以看到 gradle yayGradle0 groupTherapy
与gradle groupTherapy
两者的运行结果是相同的,这是因为 groupTherapy
与yayGradle0
直接有依赖关系,这样可以保证被依赖的任务只执行一次,并且任务间的执行顺序按照依赖关系进行。
www.coderknock.com$ gradle gT
:startSession
startSession
[ant:echo] Ant 任务的引用
chant
:yayGradle0
动态任务的定义task ':yayGradle0'
:yayGradle1
动态任务的定义task ':yayGradle1'
:yayGradle2
动态任务的定义task ':yayGradle2'
:groupTherapy
groupTherapy
BUILD SUCCESSFUL
Total time: 1.43 secs
Gradle 提供了以驼峰式缩写在命令行上运行命令的方式,我们可以通过如上面一样的gradle gT
这样的命令来达到gradle groupTherapy
这样的效果。其中要确保任务名字的缩写是唯一的不然会有如下报错效果:
www.coderknock.com$ gradle yG
FAILURE: Build failed with an exception.
* What went wrong:
Task 'yG' is ambiguous in root project 'HelloWorld'. Candidates are: 'yayGradle0', 'yayGradle1', 'yayGradle2'.
* Try:
Run gradle tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 1.296 secs
我们应该使用yG0
来代替yayGradle0
www.coderknock.com$ gradle groupTherapy -x yG0
:yayGradle1
动态任务的定义task ':yayGradle1'
:yayGradle2
动态任务的定义task ':yayGradle2'
:groupTherapy
groupTherapy
BUILD SUCCESSFUL
Total time: 1.378 secs
使用-x
参数,我们可以智能排除任务中对应的依赖任务及其相关依赖
使用gradle -h
我们可以查询gradle可用参数
www.coderknock.com$ gradle -h
USAGE: gradle [option...] [task...]
-?, -h, --help 显示此帮助消息。Shows this help message.
-a, --no-rebuild 不重新生成项目依赖项。Do not rebuild project dependencies.
-b, --build-file 指定生成文件。Specifies the build file.
-c, --settings-file 指定的设置文件。Specifies the settings file.
--configure-on-demand 只有相关的项目中运行此生成配置。这意味着更快的生成,实现大型多项目生成。[孵化中]Only relevant projects are configured in this build run. This means faster build for large multi-project builds. [incubating]
--console 指定哪种类型的控制台输出生成。值是 '普通'、 '自动' (默认值) 或 '详细'。Specifies which type of console output to generate. Values are 'plain', 'auto' (default) or 'rich'.
--continue 当一个任务执行失败后继续执行任务。Continues task execution after a task failure.
-D, --system-prop 设置系统属性的 JVM (例如 Dmyprop = myvalue)。Set system property of the JVM (e.g. -Dmyprop=myvalue).
-d, --debug 在调试模式下打印日志(包括异常堆栈)。 Log in debug mode (includes normal stacktrace).
--daemon 使用 Gradle 守护进程来进行构建,如果没有运行的守护进程则启动一个。Uses the Gradle Daemon to run the build. Starts the Daemon if not running.
--foreground 在前台启动 Gradle 守护进程。[孵化中]Starts the Gradle Daemon in the foreground. [incubating]
-g, --gradle-user-home 指定 gradle 用户的主目录。Specifies the gradle user home directory.
--gui 启动 Gradle GUI。Launches the Gradle GUI.
-I, --init-script 指定初始化脚本。Specifies an initialization script.
-i, --info 将日志级别设置为info。Set log level to info.
--include-build Includes the specified build in the composite. [incubating]
-m, --dry-run 禁用所有任务的操作来进行构建。Runs the builds with all task actions disabled.
--max-workers 配置 Gradle 允许使用的并发的数目。[孵化]Configure the number of concurrent workers Gradle is allowed to use. [incubating]
--no-daemon 不适用守护进程构建。Do not use the Gradle Daemon to run the build.
--no-scan Disables the creation of a build scan. [incubating]
--offline 构建而不访问网络资源(使用本地缓存)。The build should operate without accessing network resources.
-P, --project-prop 设置项目属性的生成脚本 (例如 Pmyprop = myvalue)。Set project property for the build script (e.g. -Pmyprop=myvalue).
-p, --project-dir Gradle 指定的起始目录。默认为当前目录。Specifies the start directory for Gradle. Defaults to current directory.
--parallel 并行构建项目。Gradle将尝试测定最佳线程数。Build projects in parallel. Gradle will attempt to determine the optimal number of executor threads to use. [incubating]
--profile 配置构建生成时间,并且在<build_dir>/reports/profile 生成对应的报告。Profiles build execution time and generates a report in the <build_dir>/reports/profile directory.
--project-cache-dir 指定特定于项目的缓存目录。默认值为.gradle 的项目根目录中。Specifies the project-specific cache directory. Defaults to .gradle in the root project directory.
-q, --quiet Log errors only.
--recompile-scripts 重新编译构建脚本。Force build script recompiling.
--refresh-dependencies 刷新依赖关系的状态。Refresh the state of dependencies.
--rerun-tasks 忽略以前缓存的任务。Ignore previously cached task results.
-S, --full-stacktrace 打印出所有异常堆栈信息(非常详细)。Print out the full (very verbose) stacktrace for all exceptions.
-s, --stacktrace 打印出所有异常堆栈信息。Print out the stacktrace for all exceptions.
--scan 创建一个构建扫描。如果尚未应用构建扫描插件,Gradle 将失败的生成。[孵化中]Creates a build scan. Gradle will fail the build if the build scan plugin has not been applied. [incubating]
--status 显示运行的和最近停止的守护进程的状态信息。 Gradle Daemon(s)。Shows status of running and recently stopped Gradle Daemon(s).
--stop 如果有守护进程在运行则停止守护进程。Stops the Gradle Daemon if it is running.
-t, --continuous 允许连续构建。Gradle在构建完成后不退出,并在任务文件变化时重新构建。Enables continuous build. Gradle does not exit and will re-execute tasks when task file inputs change. [incubating]
-u, --no-search-upward 不在父文件夹中搜索 settings.gradle。Don't search in parent folders for a settings.gradle file.
-v, --version 打印版本信息。Print version info.
-x, --exclude-task 指定要排除执行的任务。Specify a task to be excluded from execution.