Gradle学习第一篇

 

说明

这是一个基于 JVM 的富有突破性构建工具。

它为您提供了:

  • 一个像 ant 一样,通用的灵活的构建工具
  • 一种可切换的,像 maven 一样的基于约定约定优于配置的构建框架
  • 强大的多工程构建支持
  • 强大的依赖管理(基于 ApacheIvy)
  • 对已有的 maven 和 ivy 仓库的全面支持
  • 支持传递性依赖管理,而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
  • ant 式的任务和构建是 gradle 的第一公民
  • 基于 groovy,其 build 脚本使用 groovy dsl 编写
  • 具有广泛的领域模型支持你的构建

   安装

   官网下载地址

  先决条件

  Gradle在所有主要操作系统上运行,只需要安装Java JDK或JRE 7或更高版本。要检查,请运行java -version

 环境变量配置

运行 gradle 必须将 GRADLE_HOME/bin 加入到你的 PATH 环境变量中

 测试安装

运行如下命令来检查是否安装成功.该命令会显示当前的 JVM 版本和 Gradle 版本。

gradle -v 

 JVM参数配置

Gradle 运行时的 JVM 参数可以通过 GRADLE_OPTS 或 JAVA_OPTS 来设置.这些参数将会同时生效。 JAVA_OPTS 设置的参数将会同其它 JAVA 应用共享,一个典型的例子是可以在 JAVA_OPTS 中设置代理和 GRADLE_OPTS 设置内存参数。同时这些参数也可以在 gradle 或者 gradlew 脚本文件的开头进行设置

HelloWord

Gradle中的所有内容都基于两个基本概念:Projectstasks.

每个Gradle构建都由一个或多个项目组成。项目代表什么取决于您使用Gradle做什么。例如,项目可能表示库JAR或Web应用程序。它可能代表由其他项目生成的JAR组装的分发ZIP。项目不一定代表要构建的东西。它可能代表着要做的事情,例如将应用程序部署到登台或生产环境。如果现在看起来有点模糊,请不要担心。Gradle的逐个构建支持为项目的内容添加了更具体的定义。每个项目由一个或多个任务组成。任务代表构建执行的一些原子工作。这可能是编译某些类,创建JAR,生成Javadoc或将一些存档发布到存储库。

 

使用gradle命令运行Gradle构建。gradle命令查找build.gradle当前目录中调用的文件。我们称这个build.gradle文件为构建脚本,但严格来说它是一个构建配置脚本。

创建以下名为的构建脚本build.gradle

task hello {
    doLast {
        println 'Hello world!'
    }
}

在命令行shell中,移动到包含目录并使用以下命令执行构建脚本gradle -q hello

 

//--------------------
// 任务依赖
//命令 gradle -q intro
//输出 Hello world!
//      I'm Gradle
//--------------------

task hello {
    doLast {
        println 'Hello world!'
    }
}
task intro {
    dependsOn hello
    doLast {
        println "I'm Gradle"
    }
}





//--------------------
// 任务依赖-依赖任务在执行任务之后声明
//命令 gradle -q taskX
//输出 taskY
//     taskX
//--------------------

task taskX {
    dependsOn 'taskY'
    doLast {
        println 'taskX'
    }
}
task taskY {
    doLast {
        println 'taskY'
    }
}




//--------------------
// 动态任务
//命令 gradle -q task1
//输出 I'm task number 1
//--------------------

4.times { counter ->
    task "task$counter" {
        doLast {
            println "I'm task number $counter"
        }
    }
}




//--------------------
// 操作现有任务-创建任务后,可以通过API访问它们。可以使用它在运行时动态地向任务添加依赖项。Ant不允许这样的事情
//命令 gradle -q task0
//输出 
//	I'm task number 2
//	I'm task number 3
//	I'm task number 0
//--------------------


4.times { counter ->
    task "task$counter" {
        doLast {
            println "I'm task number $counter"
        }
    }
}
task0.dependsOn task2, task3




//--------------------
// 操作现有任务-添加行为
//命令 gradle -q hello
//输出 
//     Hello Venus
//     Hello Earth
//     Hello Mars
//     Hello Jupiter
//--------------------

task hello {
    doLast {
        println 'Hello Earth'
    }
}
hello.doFirst {
    println 'Hello Venus'
}
hello.configure {
    doLast {
        println 'Hello Mars'
    }
}
hello.configure {
    doLast {
        println 'Hello Jupiter'
    }
}



//--------------------
// Groovy DSL快捷方式表示法
//有一种方便的表示法来访问现有任务。每个任务都可以作为构建脚本的属性使用:
//命令 gradle -q hello
//输出 
//     Hello world!
//     Greetings from the hello task.
//--------------------



task hello {
    doLast {
        println 'Hello world!'
    }
}
hello.doLast {
    println "Greetings from the $hello.name task."
}


//--------------------
//额外的任务属性
//可以将自己的属性添加到任务中。要添加名为的属性myProperty,请设置ext.myProperty为初始值。从那时起,可以像预定义的任务属性一样读取和设置属性。
//命令 gradle -q printTaskProperties
//输出 
//     myValue
//     
//--------------------

task myTask {
    ext.myProperty = "myValue"
}

task printTaskProperties {
    doLast {
        println myTask.myProperty
    }
}

//--------------------
//默认任务
//Gradle允许您定义在未指定其他任务时执行的一个或多个默认任务
//命令 gradle -q 
//输出 
//     Default Cleaning!
//     Default Running!
//     
//--------------------

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具有配置阶段和执行阶段。在配置阶段之后,Gradle知道应该执行的所有任务。Gradle为您提供了一个利用这些信息的钩子。这样的用例是检查释放任务是否是要执行的任务之一。根据此情况,您可以为某些变量分配不同的值。
//在以下示例中,执行distribution和release任务会导致version变量的值不同。
//命令 gradle -q distribution 
//输出 We build the zip with version=1.0-SNAPSHOT
//命令 gradle -q release
//输出
//    We build the zip with version=1.0
//    We release now 
//--------------------

task distribution {
    doLast {
        println "We build the zip with version=$version"
    }
}

task release {
    dependsOn 'distribution'
    doLast {
        println 'We release now'
    }
}

gradle.taskGraph.whenReady { taskGraph ->
    if (taskGraph.hasTask(":release")) {
        version = '1.0'
    } else {
        version = '1.0-SNAPSHOT'
    }
}





//--------------------
//构建脚本的外部依赖项
//如果构建脚本需要使用外部库,则可以将它们添加到构建脚本本身的脚本类路径中。您可以使用该buildscript()方法执行此操作,并传入一个声明构建脚本类路径的块。
//对于多项目构建,使用项目buildscript()方法声明的依赖项可用于其所有子项目的构建脚本
//命令 gradle -q encode 
//输出 aGVsbG8gd29ybGQK
//--------------------

import org.apache.commons.codec.binary.Base64

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
    }
}

task encode {
    doLast {
        def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
        println new String(encodedString)
    }
}


//--------------------
//使用方法
//Gradle可以扩展您如何组织构建逻辑。为上面的示例组织构建逻辑的第一个级别是提取方法。
//对于多项目构建,使用项目buildscript()方法声明的依赖项可用于其所有子项目的构建脚本
//命令 gradle -q loadfile 
//     I'm fond of build.gradle
//     I'm fond of build2.gradle
//     I'm fond of gradle.properties
//     I'm fond of java_pid39256.hprof
//--------------------



task checksum {
    doLast {
        fileList('../../').each { File file ->
            ant.checksum(file: file, property: "cs_$file.name")
            println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
        }
    }
}

task loadfile {
    doLast {
        fileList('../Downloads').each { File file ->
            ant.loadfile(srcFile: file, property: file.name)
            println "I'm fond of $file.name"
        }
    }
}

File[] fileList(String dir) {
    file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值