task类型

  • copy

    task copyFiles(type: Copy) {
    from 'resources'
    into 'target'
    include '**/*.xml', '**/*.txt', '**/*.properties'
    }
  • jar

    apply plugin: 'java'
    task customJar(type: Jar) {
    manifest {
    attributes firstKey: 'firstValue', secondKey: 'secondValue'
    }
    archiveName = 'hello.jar'
    destinationDir = file("${buildDir}/jars")
    from sourceSets.main.classes
    }
  • JavaExec 运行一个java类的main方法

    apply plugin: 'java'
    repositories {
    mavenCentral()
    }
    dependencies {
    runtime 'commons-codec:commons-codec:1.5'
    }
    task encode(type: JavaExec, dependsOn: classes) {
    main = 'org.gradle.example.commandline.MetaphoneEncoder'
    args = "The rain in Spain falls mainly in the plain".split().toList()
    classpath sourceSets.main.classesDir
    classpath configurations.runtime
    }

自定义task类型

  • 在构建文件中定义

    task createDatabase(type: MySqlTask) {

    sql = 'CREATE DATABASE IF NOT EXISTS example'


    task createUser(type: MySqlTask, dependsOn: createDatabase) {

    sql = "GRANT ALL PRIVILEGES ON example.*
    TO exampleuser@localhost IDENTIFIED BY 'passw0rd'"


    task createTable(type: MySqlTask, dependsOn: createUser) {

    username = 'exampleuser'
    password = 'passw0rd'
    database = 'example'
    sql = 'CREATE TABLE IF NOT EXISTS users
    (id BIGINT PRIMARY KEY, username VARCHAR(100))'


    class MySqlTask extends DefaultTask {

    def hostname = 'localhost'
    def port = 3306
    def sql
    def database
    def username = 'root'
    def password = 'password' @TaskAction
    def runQuery() {
    def cmd
    if(database) {
    cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} ${database} -e "
    }
    else {
    cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} -e "
    }
    project.exec {
    commandLine = cmd.split().toList() + sql
    }

    }

  • 在源码树中定义

    在构建文件中:

    task createDatabase(type: MySqlTask) {
    sql = 'CREATE DATABASE IF NOT EXISTS example'
    }
    task createUser(type: MySqlTask, dependsOn: createDatabase) {
    sql = "GRANT ALL PRIVILEGES ON example.* TO exampleuser@localhost IDENTIFIED BY 'passw0rd'"
    }
    task createTable(type: MySqlTask, dependsOn: createUser) {
    username = 'exampleuser'
    password = 'passw0rd'
    database = 'example'
    sql = 'CREATE TABLE IF NOT EXISTS users (id BIGINT PRIMARY KEY, username VARCHAR(100))'
    }

    buildSrc文件夹中新建一个MySqlTask.groovy

    import org.gradle.api.DefaultTask
    import org.gradle.api.tasks.TaskAction class MySqlTask extends DefaultTask {
    def hostname = 'localhost'
    def port = 3306
    def sql
    def database
    def username = 'root'
    def password = password @TastAction
    def runQuery(){
    def cmd
    if(database){
    cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} ${database} -e"
    }else{
    cmd = "mysql -u ${username} -p${password} -h ${hostname} -P ${port} -e"
    }
    project.exec{
    commandLine = cmd.split().toList() + sql
    }
    } }

四个位置可以写你的自定义构建代码

  1. 在构建文件中的task代码块中
  2. buildSr文件夹中,此文件夹在.gradle文件同级
  3. 将分散的构建文件写入到主构建文件中
  4. 使用java或groovy写插件

http://my.oschina.net/zjzhai/blog/220028

Gradle中关于Project和Task的更多细节。

1. Project和Task

对于build.gradle配置文件,当运行Gradle <Task> 时,Gradle会为我们创建一个Project的对象,来映射build.gradle中的内容。其中呢,对于不属于任何Task范畴的代码,Gradle会创建一个Script类的对象,来执行这些代码;对于Task的定义,Gradle会创建Task对象,并将它会作为project的属性存在(实际上是通过getTaskName完成的)。ok,看一个简单的例子:

新建文件basic/build.gradle,然后加入如下部分代码:

println "the project name is $name" task hello << {     println "the current task name is $name"     println "hello world" }

当运行这个例子时,首先Gradle会创建一个Porject的对象,然后将它和build.gradle的内容映射起来。在这个例子中,project包括两部分: 1)可执行脚本定义

按照之前提到的,可执行脚本的定义将直接被创建成对应的Script类的对象    在这个例子中,Script对应的部分就是第一行println的部分,然后执行的结果就是打印出 "the project name is basic"。    默认的,Project的名字是当前build.gradle所在目录的名字,在这个例子中,build.gradle放在basic目录下,因此,project的name也就是basic.

2)Task定义

在这个例子中,Gradle将创建一个Task的实例,将其和定义的task内容关联起来。另外,按照之前所说的,当Gradle运行时,我们可以使用访问project属性的方式去访问它。

例如,这个例子中,我们可以使用project.hello来访问这个task。因为这个task hello已经成为project的一个属性,那么当我们使用gradle properties(properties是gradle自带的一个Task,它能列出当前project级别的所有属性,可以使用gradle tasks查看更多内建的Task)来获取project级别的属性列表时,也将会得到'hello'。

另外,有一点要注意的是,在这个例子中,task中使用的$name,并不是Project的name,它是当前Task的name,因为它被使用在Task的scope里。

执行Gradle hello,输出的结果将是:

current project name is test the current task name is hello hello world

http://www.blogjava.net/wldandan/archive/2012/07/05/382246.html

Gradle的Project从本质上说只是含有多个Task的容器,一个Task与Ant的Target相似,表示一个逻辑上的执行单元。我们可以通过很多种方式定义Task,所有的Task都存放在Project的TaskContainer中。

(1)调用Project的task()方法创建Task

在使用Gradle时,创建Task最常见的方式便是:

task hello1 << {
println 'hello1'
}

这里的“<<”表示追加的意思,即向hello中加入执行过程。我们还可以使用doLast来达到同样的效果:

task hello2 {
doLast {
println 'hello2'}
}

另外,如果需要向Task的最前面加入执行过程,我们可以使用doFirst:

task hello3 {
doLast {
println 'hello3'}
}

在上面的3个例子中,Gradle的DSL向我们展示了一种非常自然的风格来创建Task,而事实上这些都只是一种内部DSL,也即必须符合groovy的语法要求。上面的task关键字实际上是一个方法调用,该方法属于Project。Project中存在多个重载的task()方法。和Ruby等动态语言一样,在调用groovy方法时,我们不用将参数放在括号里面。

以上我们自定义的3个Task都位于TaskContainer中,Project中的tasks属性即表示该TaskContainer。为此,我们可以新建一个Task来显示这些信息:

task showTasks {
println tasks.class
println tasks.size()
}

将以上4个Task放在同一个build.gradle中,再执行gradle showTasks,命令行输出如下:

...
class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated
4
...

上面的DefaultTaskContainer_Decorated表示tasks类型,而4表示该TaskContainer中包含有4个自定义的Task——包括showTasks本身。

http://www.tuicool.com/articles/Avy2Ir

13.1. The Gradle build language构建语言

Gradle提供了一种“领域专用语言”(domain specific language) 或者 DSL对构建进行描述。这种语言基于Groovy,并加入了其他特性使得描述更简单。

13.2. The Project API

在第七章Chapter 7, Java Quickstart 我们以apply() 方法为例做了描述。咦,这个方法哪来的?当时我们说脚本定义了工程,对于每一个工程Gradle会创建一个 Project 型的实例并将该对象实例和构建脚本进行关联。当构建脚本执行时会配置这个对象:

Getting help writing build scripts

嗨嗨别忘了构建脚本是Groovy代码,用的是Gradle API。而Project 接口就是你最先要了解的访问Gradle API的工具。所以要了解什么标签可用,就得去看Project 接口的文档.

  • 脚本中调用的任何方法如果在基本中无定义,都委托给Project对象。

  • 属性的访问同上。

咱们试着访问name属性看看 。

Example 13.1. Accessing property of the Project object

build.gradle

println name
println project.name

Output of gradle -q check

> gradle -q check
projectApi
projectApi

哇唔,俩println 语句都打出了同一个属性。前者是自动委托了Project对象,对于没在脚本里定义的属性施行。后者使用了工程命来关联Project对象。 如果你定义的属性和Project的成员一样了,那就必须使用工程名进行界定了

http://somefuture.iteye.com/blog/2009114

随便新建个目录(我这里建了一个名为builds的目录),cd进去,新建一个build.gradle文件,以下示例都编辑在build.gradle中。

说明:> 后 跟gradle命令。 -q参数会关闭一些命令中的log信息,如 gradle -q hello

定义一个任务,并执行

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

> gradle hello

定义一个快捷任务

task hello2 << {         println 'admin\nHello world!'      }

> gradle hello2

<< 代表 doLast{}

使用Groovy 语言

task upper << {     String someString = 'mY_nAmE'     println "Original: " + someString      println "Upper case: " + someString.toUpperCase() }

> gradle upper

循环遍历

task foreach << {     10.times { println "the times is $it." } }

> gradle foreach

10.times,循环条件<10;$it 表示循环变量

http://blog.csdn.net/jjwwmlp456/article/details/41350413

A basic Java project  一个基础的java工程

使用java插件在build.gradle:
apply plugin: 'java'
 

Building the project 构建工程

这里使用gradle/samples/java/quickstart  示例工程。shell进该目录。
> gradle build
命令所 运行的任务有 (你可以使用gradle taskName 来单独运行以下的一种任务): :compileJava :processResources :classes :jar :assemble :compileTestJava :processTestResources :testClasses :test :check :build
 

任务后提示 UP-TO-DATE 表示文件无更新,已为最新

任何执行成功后,会在当前目录下生成build目录,build目录下会生成classes和libs等目录
Intelli J 或 Android Studio 建立的工程的目录有:
  src/main/java/  source code  
src/test/java/   test source code  
src/main/resources/  will be include in the JAR file  
src/test/resources/          will be include in the classpath used to run the tests
 
其他一些 有用的任务: clean 清除build目录 < gradle clean
Deletes the build directory, removing all built files.  assemble 编译打jar包
< gradle assemble
:compileJava :processResources :classes :jar :assemble 会调用这五个task。编译,处理资源,生成字节码,生成jar包      
 
http://blog.csdn.net/jjwwmlp456/article/details/41379841

Gradle digest的更多相关文章

  1. gradle 打包所有依赖 Invalid signature file digest for Manifest main attributes(转)

    1.打包所有依赖: // 指定main函数的类 jar { manifest { attributes "Main-Class": "com.baeldung.fatja ...

  2. Gradle缓存目录文件命名规则

    在打开Android Studio项目的时候,会下载项目对应版本的gradle,该版本是在项目根目录下\gradle\wrapper\gradle-wrapper.properties文件中指定的: ...

  3. gradle 打包 jar (一波三折)

    第一次尝试,打包成功,运行失败 build.gradle 打包 jar { baseName 'testJar' from { //添加依懒到打包文件 //configurations.compile ...

  4. 《gradle 用户指南中文版》目录

    gradle 用户指南 版权所有©2007-2017 Hans Dockter,Adam Murdoch只要您不对这些副本收取任何费用,并且进一步规定,每个副本都包含本版权声明,无论是以印刷版还是电子 ...

  5. gradle cache目录(.gradle)剖析

    https://zhuanlan.zhihu.com/p/26473930 gradle下载后会对文件路径进行修饰,本文给出反向解析,把文件路径修改为原始路径的办法. 之所以研究这个,本来的目的是为了 ...

  6. Gradle配置APK自动签名完整流程

    转载请注明出处:http://www.cnblogs.com/LT5505/p/6256683.html 一.生成签名 1.命令行生成签名,输入命令keytool -genkey -v -keysto ...

  7. gradle学习笔记(1)

    1. 安装     (1) 下载最新gradle压缩包,解压到某处.地址是:Gradle web site:     (2) 添加环境变量:             1) 变量名:GRADLE_HOM ...

  8. Gradle 实现 Android 多渠道定制化打包

    Gradle 实现 Android 多渠道定制化打包 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在项目中遇到需要实现 Apk 多渠道.定制化打包, Google .百度查找了一些资料, ...

  9. 解决 Could not find com.android.tools.build:gradle 问题

    今天拉同事最新的代码,编译时老是报如下错误: Error:Could not find com.android.tools.build:gradle:2.2.0.Searched in the fol ...

随机推荐

  1. IT痴汉的工作现状13-吓唬电话

    那是一个普通的周末上午,稍微阴沉的天,使得暑气消退了好多.刚吃过早饭,我懒懒的浏览着CSDN论坛上有趣的问题和答案. 突然电话响起.是一个陌生的号码.我像往常一样接起电话,""您好 ...

  2. Hadoop-2.2.0中国文档—— MapReduce 下一代 -- 公平调度

    目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器,同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法.以致到最后 ...

  3. POJ 3264-Balanced Lineup(段树:单点更新,间隔查询)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 34522   Accepted: 16224 ...

  4. 依法使用Linux,反对Linux国产化

    10月28日.中国操作系统应用推广大会在京举行,包含中央办公厅.公安部.工信部在内的多个中央国家机关部委出席该会.此次推广大会的召开或标志着操作系统国产化进程的进一步推进. 会上.中国project院 ...

  5. swift-辞典NSDictionary定义,变化的关键,删/加入关键

    // Playground - noun: a place where people can play import UIKit //--------------------------------- ...

  6. 欢迎CSDN-markdown编辑

    CSDN-发布markdown编辑,果断地赞啊!. $(function () { $('pre.prettyprint code').each(function () { var lines = $ ...

  7. 在MyEclipse8.5中配置Tomcat6.0服务器

    一.单击工具栏的的黑小三角,选择—>Configure Server,出现首选项对话框,在对话框的左边框中找到MyEclipse—>Application Servers下找到Tomcat ...

  8. POJ---2243 Knight Moves 使用A*算法的广度优先搜索

    题目链接:http://poj.org/problem?id=2243 启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省 ...

  9. With As 获取 id parentId 递归获取所有

    Declare @Id Int  Set @Id = 5;    ---在此修改父节点    With RootNodeCTE(Id,ParentId)  As  (  Select Id,Paren ...

  10. 【原创翻译】认识MVC设计模式:web应用开发的基础(实际编码篇)

    原文地址:http://www.larryullman.com/2009/10/15/understanding-mvc-part-3/ 全系列INDEX [原创翻译]认识MVC设计模式:web应用开 ...