via: https://tianyu94.com/2019/06/...
task helloWorld { doLast { println 'Hello world~' } }
$ gradle -q helloWorld Hello world~
-q
quiet 只输出 task 的相关信息
DefaultTask
类,标准的 Task
实现。task startTask { doLast { hello() } } def hello() { println 'Hello~' }
$ gradle startTask Hello~
3.times { task 'repeatTask$it' { println 'I am repeat task' } } // 指定此 task 需依赖 repeatTask0 task groupTherapy(dependsOn: repeatTask0)
$ gradle groupTherapy :repeatTask0 I am repeat task :repeatTask1 I am repeat task :repeatTask2 I am repeat task
$ gradle groupTherapy -x repeatTask1 :repeatTask0 I am repeat task :repeatTask2 I am repeat task
-x
排除指定 task
$ gradle repeatTask0 groupTherapy :repeatTask0 I am repeat task :repeatTask1 I am repeat task :repeatTask2 I am repeat task
执行多个 task,且每一个 task 仅执行一次
task printVersion { doFirst { println 'Version 0.1 in doFirst' } doLast { println 'Version 0.1 in doLast' } } printVersion.doFirst { println 'First action' } printVersion.doLast { println 'Last action' }
$ gradle printVersion First action Version 0.1 in doFirst Version 0.1 in doLast Last action
task myTask { group = 'group1' description = 'I am myTask of group1' } // or task myTask(group: 'group1', description: 'I am myTask of group1') { // ... }
task myTask(dependsOn: [otherTask1, otherTask2]) { // ... }
注意,若执行 myTask,它依赖的 otherTask1 和 otherTask2 (除其自己有依赖关系外)并不会保证执行的前后顺序与代码顺序一致。这个特征可以使多个 task 并行执行提升效率,或是忽略固定的顺序来保证代码的维护性和避免潜在的破坏
task task1 { doLast { println 'task1' } } task task2 { doLast { println 'task2' } } task1.finalizedBy task2
$ gradle task1 task1 task2
若终结器 task 执行失败,则不会影响 Gradle 的 task 的执行进度
-?
/ -h
/ --help
打印帮助信息-b
/ --build-file
指定构建文件 e.g. gradle -b my.gradle
--offline
使用缓存离线构建-q
/ --quiet
, -w
/ --warning
, -i
/ --info
, -d
/ --debug
日志等级s
/ --stacktrace
打印简要堆栈跟踪S
/ --full-stacktrace
打印全部堆栈跟踪tasks
显示项目可运行的 task,-a
/ --all
显示所有 taskproperties
显示项目中可用属性apply plugin: 'java'
apply plugin: 'war' // 部分自定义属性设置 webAppDirName = 'mywebfiles' // 指定Web应用的源代码路径 war { // 将 mydir1,mydir2 路径添加到 war 文件的根目录下 from 'mydir1' from 'mydir2' }
// 在 Gradle 4.0 以前可用 apply plugin: 'jetty' // 在 Gradle 4.0 以后 jetty 插件已移除,替换为 Gretty // 其余引用方法见官网:https://gretty-gradle-plugin.github.io/gretty-doc/Getting-started.html apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin' // Gretty 属性设置 // 详情见官网:https://gretty-gradle-plugin.github.io/gretty-doc/Gretty-configuration.html gretty { httpPort = 8081 // 指定服务端口 contextPath = '/MyWebApp' // 指定 url 根路径 // ... many more properties }
appRun
/ jettyRun
运行程序version = 0.1 // 设置项目版本 sourceCompatibility = 1.8 // 设置Java编译兼容版本为 1.8 jar { manifest { // 添加属性到 Jar 文件中 attributes 'Main-Class': 'path.to.your.MainClass' } } sourceSets { main { java { // 自定义源代码路径,默认是 /src/main/java/ srcDirs = ['your_src_dir_path'] } } test { java { // 自定义测试代码路径,默认是 /src/test/java srcDirs = ['your_test_dir_path'] } } }
project.ext.myProp = 'hello' // or ext.myProp = 'hello' // or myProp = 'hello'
或者在 gradle.properties
文件中定义拓展属性html
repositories { mavenCentral() // 使用 Maven Central 2 仓库 } // 如下依赖存在多个重复,仅作示例 dependencies { // 编译使用 compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.9' // 简写形式,用冒号隔开 compile 'org.apache.commons:commons-lang3:3.9' // 同 compile ,在 Gradle 5.x 后(建议)用此替换 compile implementation 'org.apache.commons:commons-lang3:3.9' // 编译时须要,在运行时由环境提供 providedCompile 'javax.servlet:servlet-api:2.5' // 运行时提供 runtime 'javax.servlet:jstl:1.1.2' }
$ gradle wrapper # 在构建脚本 build.gradle 旁会生成 gradle/wrapper/... 的包装器文件 *.jar 和 *.properties # 同时生成 gradlew(for linux),gradlew.bat(for windows)
gradlew.bat ...
gradlew ...
task wrapper(type: Wrapper) { // 指定 Gradle 版本 gradleVersion = '5.1.1' // 获取 Gradle 包的 url distributionUrl = 'http://mycustomserver.com/gradle/dists' // 包装器被解压后存放的相对路径 distributionPath = 'gradle-dists' }
笔记部份内容来源:Gradle in Action https://www.manning.com/books...