第一个 Gradle 脚本及简单命令
task helloworld { doLast { print 'Hello world!' }}/* < <这种方式将在 gradle5.0 中删除,不建议使用 * task helloworldsort << { print 'hello world!'}task startsession println 'startsession' chant()}def chant() *使用 gradle -q task名称 的方式运行会没有效果 使用 的方式运行才有效果* ant.echo(message: 'ant 任务的引用') 'chant'}3.times "yaygradle$it" '动态任务的定义' + it }} dependson 说明 之间的依赖关系,gradle 会确保被依赖的 总会在定义该依赖的 之前执行 yaygradle0.dependson startsessionyaygradle2.dependson yaygradle1, yaygradle0 任务执行的顺序 -> 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 --allThe 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:\Windows\Desktop\LearnGradle\HelloWorld\build.gradle:7):tasks------------------------------------------------------------All tasks runnable from root project------------------------------------------------------------
构建的 setip 任务,帮助初始化 Gradle 的构建(比如生成 build.gradle 文件)
Build Setup tasks-----------------init - Initializes a new Gradle build. [incubating]wrapper - Generates Gradle wrapper files. [incubating]
帮助任务组,这里列出了任务的名称以及对应描述
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'.
没有分类的任务【目前列出的是我们刚刚声明的任务,自己生命的任务也可以设置任务组】,后期会学习如何添加描述信息
Other tasks-----------groupTherapyhelloworldhelloworldSortstartSessionyayGradle0yayGradle1yayGradle2BUILD SUCCESSFULTotal time: 1.29 secs
每个构建脚本都会默认暴露 Help tasks 任务组,如果某个 task 不属于一个任务组,就会显示在 Other tasks 中。
任务执行
www.coderknock.com$ gradle yayGradle0 groupTherapy:startSessionstartSession[ant:echo] Ant 任务的引用chant:yayGradle0动态任务的定义task ':yayGradle0':yayGradle1动态任务的定义task ':yayGradle1':yayGradle2动态任务的定义task ':yayGradle2':groupTherapygroupTherapyBUILD SUCCESSFULTotal time: 1.61 secs
www.coderknock.com$ gradle groupTherapy:startSessionstartSession[ant:echo] Ant 任务的引用chant:yayGradle0动态任务的定义task ':yayGradle0':yayGradle1动态任务的定义task ':yayGradle1':yayGradle2动态任务的定义task ':yayGradle2':groupTherapygroupTherapyBUILD SUCCESSFULTotal time: 1.614 secs
我们可以看到 gradle yayGradle0 groupTherapy
与gradle groupTherapy
两者的运行结果是相同的,这是因为 groupTherapy
与yayGradle0
直接有依赖关系,这样可以保证被依赖的任务只执行一次,并且任务间的执行顺序按照依赖关系进行。
www.coderknock.com$ gradle gT:startSessionstartSession[ant:echo] Ant 任务的引用chant:yayGradle0动态任务的定义task ':yayGradle0':yayGradle1动态任务的定义task ':yayGradle1':yayGradle2动态任务的定义task ':yayGradle2':groupTherapygroupTherapyBUILD SUCCESSFULTotal time: 1.43 secs
Gradle 提供了以驼峰式缩写在命令行上运行命令的方式,我们可以通过如上面一样的gradle gT
这样的命令来达到gradle groupTherapy
这样的效果。其中要确保任务名字的缩写是唯一的不然会有如下报错效果:
www.coderknock.com$ gradle yGFAILURE: 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 FAILEDTotal time: 1.296 secs
我们应该使用yG0
来代替yayGradle0
www.coderknock.com$ gradle groupTherapy -x yG0:yayGradle1动态任务的定义task ':yayGradle1':yayGradle2动态任务的定义task ':yayGradle2':groupTherapygroupTherapyBUILD SUCCESSFULTotal time: 1.378 secs
使用-x
参数,我们可以智能排除任务中对应的依赖任务及其相关依赖
使用gradle -h
我们可以查询gradle可用参数
www.coderknock.com$ gradle -hUSAGE: 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 配置构建生成时间,并且在/reports/profile 生成对应的报告。Profiles build execution time and generates a report in the /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.