资讯专栏INFORMATION COLUMN

Gradle 笔记

coordinate35 / 1212人阅读

via: https://tianyu94.com/2019/06/...

Make the impossible possible, make the possible easy, and make the easy elegant

Gradle is Groovy

Minimize Coupling, Maximize Cohesion

Task 任务
task helloWorld {
  doLast {
    println "Hello world~"
  }
}
$ gradle -q helloWorld
Hello world~
-q quiet 只输出 task 的相关信息

每个新建的 task 默认都是 DefaultTask 类,标准的 Task 实现。

结合函数方法
task startTask {
  doLast {
    hello()
  }
}

def hello() {
  println "Hello~"
}
$ gradle startTask
Hello~
动态 task
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 添加动作
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
task myTask(dependsOn: [otherTask1, otherTask2]) {
  // ...
}
注意,若执行 myTask,它依赖的 otherTask1 和 otherTask2 (除其本身有依赖关系外)并不会保证执行的先后顺序与代码顺序一致。这个特征可使多个 task 并行执行提高效率,或是忽略固定的顺序来保证代码的维护性和避免潜在的破坏
终结器 task (finalizer 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 打印所有堆栈跟踪

帮助 task

tasks 显示项目可运行的 task,-a / --all 显示全部 task

properties 显示项目中可用属性

插件 使用 Java 插件
apply plugin: "java"
使用 War 插件
apply plugin: "war"

// 部分自定义属性设置
webAppDirName = "mywebfiles" // 指定Web应用的源代码路径
war {
  // 将 mydir1,mydir2 路径添加到 war 文件的根目录下
  from "mydir1"
  from "mydir2"
}
使用 Jetty 插件
// 在 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
}
Gretty tasks

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 文件中定义拓展属性

依赖
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)
使用包装器

Windows: gradlew.bat ...

Linux: 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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75018.html

相关文章

  • Gradle学习笔记 使用Gradle Wrapper

    摘要:可以在没有安装的情况下使用,这时候就需要了。创建文件使用来创建一组文件。官方建议我们在所有项目中都创建文件,方便没有安装的用户使用。代码如下然后使用来查看变更之后的版本。不过只需要下载一次,之后再次使用相同的版本就不会下载了。 Gradle可以在没有安装Gradle的情况下使用,这时候就需要Gradle Wrapper了。Gradle Wrapper其实就是一个脚本文件,它会在没有安装...

    Richard_Gao 评论0 收藏0
  • gradle-学习笔记(1)-初步使用

    摘要:最近想深入的学习一下工程化方面相关的东西,在和直接纠结不已,因为的扩展性太差劲了,学习成本颇高,所以最后投入了的怀抱中,以后有时间再重新学习一下吧最近的学习笔记是基于系列,其中各种教程和例子大都是来源于官方文档或者网络上的博客。 最近想深入的学习一下工程化方面相关的东西,在maven和gradle直接纠结不已,因为maven的扩展性太差劲了,学习成本颇高,所以最后投入了gradle的怀...

    frank_fun 评论0 收藏0
  • gradle-学习笔记(2)-多项目构建

    摘要:记得在中支持多个子项目的构建方法同样的在中也会支持多项目的构建方法还记得在中如何配置多项目工程吗这里回忆一下首先我们需要一个父元素文件比如这样而在中我们并不需要指定父元素的标签我们只需要编写好对应的文件夹名称,并且将文件夹名称和对 记得在maven中支持多个子项目的构建方法,同样的在gradle 中也会支持多项目的构建方法 还记得在maven中如何配置多项目工程吗, 这里回忆一下 首先...

    happen 评论0 收藏0
  • Gradle学习笔记(1)创建简单的Java项目

    摘要:是一个基于和概念的项目自动化构建工具。当前其支持的语言限于和主要面向应用。本次分享将具体讲述如何利用来创建一个简单的项目。首先我们新建一个文件夹作为展示的项目。中的代码如下这是用来定义项目。接着创建文件夹,这是项目开发中习惯性的构建方法。   Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言(DSL)...

    URLOS 评论0 收藏0
  • 鸿蒙学习笔记之初运项目

    摘要:项目结构下面是我们创建项目生成的目录展开目录如下配置文件,由系统自动生成,一般情况下不需要进行修改开发工具的信息默认启动模块主模块,开发者用于编写源码文件以及开发资源文件的目录用于存放模块的依赖文件用于存放源码用于存放应用所用到的资源文件 1.项目结构 下面是我们创建项目生成的目录 1.M...

    不知名网友 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<