虽然很多童鞋都必须要用IDE,但有些命令是IDE很难表现出来的,还是命令行返璞归真。本文就带你来剖析Gradle的命令行。

本文不包括试验性(incubating)的选项,如--configure-on-demand、--parallel、--max-workers等。因为他们的变更可能性和频率很大,感兴趣的童鞋可自行研究。

Gradle命令格式

Gradle命令行格式

gradle [option...] [task...]

option表示选项,task表示任务,省略号可以是多个,其实options和task是顺序并非严格按上面的排列。

-a(--no-rebuild)

-a(--no-rebuild) -a是短格式,--no-rebuild是长格式,此选项的作用是不重新构建依赖的项目,如你构建的是多项目应用,如下面的构建脚本所示,user依赖uitls

// build.gradle

subprojects{
    apply plugin: 'java'
}

project(':user'){
    dependencies {
        compile project(':utils')
    }
}

如你构建user,则utils也会构建

$ gradle user:build

输出

如果加上-a选项,则不会构建utils,输出中不会打印utils的信息(红框中的)。

-b -c -p

Gradle默认的构建脚本文件名是build.gradle,配置的文件名是settings.gradle,但你可以通过-b(--build-file)来指定构建脚本,-c(--settings-file)来指定配置文件,这种比较适合多种开发场景如测试、开发等。

// cmd/build-setting/test-build.gradle
apply plugin: 'java'

task hello {
    doLast {
        println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."
    }
}

执行gradle -q hello -b cmd/build-setting/test-build.gradle输出

using build file 'test-build.gradle' in 'build-setting'.

其实使用-b选项并非是把build script用于当前的位置的项目,其含义是构建build script所在的项目,比如如果执行gradle -q build -b cmd/build-setting/test-build.gradle你会发现构建的build在cmd/build-setting/目录里生成。

所以其实和使用-p(--project-dir)选项是类似的效果,把test-build.gradle重命名为默认的build.gradle,执行gradle -q hello -p cmd/build-setting/输出

using build file 'build.gradle' in 'build-setting'.

还有个特殊情况,当使用-b的时候,Gradle会忽略配置文件settings.gradle,即使使用-c来指定也不行,当然单项目可以没有settings.gradle文件,下面来看看多项目的.

// settings.gradle
rootProject.name = 'blog'

include 'user'
// test-build.gradle
project(':user'){
    task hello {
        doLast {
        println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."
        }
    }
}

进入test-build.gradle目录并执行gradle -q :user:hello -b test-build.gradle输出

FAILURE: Build failed with an exception.

........

* What went wrong:

A problem occurred evaluating root project 'build-setting'.

> Project with path ':user' could not be found in root project 'build-setting'.

由此可见settings.gradle被忽略,不仅root project没有被设置,而且找不到项目user。可见-b和-c不能共存,构建脚本和配置文件两者必须有一个是默认文件名。

其实我们还可以在settings.gradle中通过设置rootProject.buildFileName属性来指定build script

// settings.gradle

rootProject.name = 'blog'
rootProject.buildFileName = 'test-build.gradle'

include 'user'

现在你可以执行gradle -q :user:hello,当然你也可以使用-c 指定配置文件如gradle -q :user:hello -c settings.gradle

--console

指定控制台输出类型,可选值有 ‘plain’, ‘auto’ (默认) , ‘rich’。

  • plain 是生成普通的文本,该选项禁止所有颜色和富文本输出;
  • auto (默认)当构建程序与控制台相关联时启动 颜色和富文本输出,或者不关联时生成普通文本;
  • rich 启动颜色和富文本输出,忽略构建程序是否关联了控制台,如果没有关联构建输出将输出 ANSI 控制字符来生产富文本输出;

执行“gradle -q build --console=rich”输出

执行“gradle -q build --console=plain”输出

--continue

Gradle默认的任务执行模式尽快呈现异常即任务失败立即终止并抛出异常信息,比如编译失败,不会执行单元测试。而选项--continue的作用:任务队列中即使某个任务失败,不会终止执行,而是会继续执行下一个任务。

-P -D

-D 在Gradle和Java命令行一样的作用,都是给当前的JVM提供参数,但也可以给Gradle设置额外的属性;而-P是Gradle专用的,提供额外的属性,如

// build.gradle
task printProps {
    doLast {
        println cmdPname
        println cmdDname
    }
}

执行“gradle -q -PcmdPname=zhai -Dorg.gradle.project.cmdDname=qianfeng printProps”输出

zhai

qianfeng

-q -i -d -s -S

Gradle有主要是靠日志和做交互,它有6种日志级别,由高到低是

  • ERROR - 错误消息
  • QUIET - 重要的信息消息
  • WARNING - 警告消息
  • LIFECYCLE - 进度信息消息
  • INFO - 信息性消息
  • DEBUG - 调试消息

-q -i -d 主要是用于设置日志级别,默认是LIFECYCLE级别:

  • -q(--quite)只记录Error错误,也就是把日志级别设置为ERROR;
  • -i(--info)把日志级别设置为INFO;
  • -d(--debug)把日志级别设置为最低的debug,并跟踪正常的堆栈信息;

而-s 和-S主要是为了跟踪堆栈信息的:

  • -s(--stacktrace)打印堆栈信息;
  • -S(--full-stacktrace)打印全部堆栈信息;

与daemon相关

  • --daemon 使用Gradle的守护进程构建,能够提高构建效率,如果守护进程没启动或现有的都处于忙碌状态,就启动一个;
  • --no-daemon 如果你已经配置为使用守护进程构建,可以使用该选项本次不用守护进程构建;
  • --stop 停止正在运行的守护进程;
  • --status 查看正在运行和最近停止的守护进程;

-g -I

-g(--gradle-user-home)设置Gradle的user home,默认是USER_HOME/.gradle。

我们知道maven有setting.xml用于设置maven的一些和项目无关的公用的配置,而在Gradle就是利用init.gradle来做到,而如果inti.gradle没有放在约定的位置,则就需要使用-I(--init-script)来指定了。

-m -x

-m(--dry-run) 有时你可能只是想验证下build script是否正确执行比如哪些任务执行,是否按照预期的顺序执行等,并不想真正执行任务的动作或行为,那么这时就要用到-m选项。

-x(--exclude-task) 当任务有依赖时,并不想执行依赖中的任务可以使用-x选项来排除改任务。

由于两个选项简单而且容易理解,这里合在一起给一个实例,如验证构建,但跳过单元测试的命令行

gradle -m build -x test

--offline --refresh-dependencies

--offline 选项的作用是让Gradle只使用本地cache里的依赖,如果cache中没有也不会更新依赖,而是失败。

--refresh-dependencies 选项的作用是检查依赖是否有更新比如动态版本、SHA1进行本地cache和远程仓库散列码的对比等,有更行则下载更新进行构建。使用这种方式免去了手动删除cache的麻烦。

--profile

该选项将在项目的根目录build/reports/profile生成一个以构建时间为名称的html文件,其中记录一些有用的信息比如执行任务花费的时间以及任务的状态等。

--project-cache-dir

用于指定project-specific缓存目录,默认是在项目的.gradle目录里。project-specific是用于项目的增量编译等,放在.gradle中的好处是gradle wrapper也可以使用,请根据需要使用。

--rerun-tasks

该选项会忽略所有任务执行的优化如增量构建,强制重新执行任务。

--recompile-scripts

绕开缓存,重新编译script。

-u

-u(--no-search-upwards)禁止向父目录搜索setting.gradle文件。

未完待续....


更多原创文章可关注我的个人博客:宅前疯 或微信公众账号:zhaiqianfeng

Gradle之恋-命令行详解的更多相关文章

  1. Scrapy框架的命令行详解【转】

    Scrapy框架的命令行详解 请给作者点赞 --> 原文链接 这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名例子如下: loca ...

  2. [转载]OpenSSL中文手册之命令行详解(未完待续)

     声明:OpenSSL之命令行详解是根据卢队长发布在https://blog.csdn.net/as3luyuan123/article/details/16105475的系列文章整理修改而成,我自己 ...

  3. 7Z命令行详解

    7z.exe在CMD窗口的使用说明如下: 7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za <co ...

  4. 7-zip命令行详解

    一.简介 7z,全称7-Zip, 是一款开源软件.是目前公认的压缩比例最大的压缩解压软件. 主要特征: # 全新的LZMA算法加大了7z格式的压缩比 # 支持格式: * 压缩 / 解压缩:7z, XZ ...

  5. gcc命令行详解

    介绍] ----------------------------------------- 常见用法: GCC 选项 GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但 ...

  6. [转]TFS常用的命令行详解

    本文转自:http://blchen.com/tfs-common-commands/ 微软的TFS和Visual Studio整合的非常好,但是在开发过程中,很多时候只用GUI图形界面就会发现一些复 ...

  7. 【转】winrar命令行详解

    从命令行也可以运行 WinRAR 命令,常规的命令行语法描述如下: WinRAR  <命令> -<开关1> -<开关N> <压缩文件> <文件.. ...

  8. GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名(转载)

    转载自:http://www.cnblogs.com/cy163/archive/2009/03/12/1409434.html 1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和 ...

  9. Python爬虫从入门到放弃(十三)之 Scrapy框架的命令行详解

    这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名例子如下: localhost:spider zhaofan$ scrapy start ...

随机推荐

  1. Markdown使用教程

    Markdown 是一种 轻量级标记语言,主要特点是:使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档". 本文参考了:语法手册.简书介绍. 常用语法 一.标 ...

  2. 【原】小写了一个cnode的小程序

    小程序刚出来的第一天,朋友圈被刷屏了,所以趁周末也小玩了一下小程序.其实发觉搭建一个小程序不难,只要给你一个demo,然后自己不断的查看文档,基本就可以入门了,不过对于这种刚出来的东西,还是挺多坑的, ...

  3. CodeForces 721A

    A. One-dimensional Japanese Crossword time limit per test:1 second memory limit per test:256 megabyt ...

  4. ubuntu 笔记一

    注:ubuntu14.04 64位 1.刚安装的ubuntu无法在终端使用su 原因:root没有默认密码,需要手动设定. 解决方法:以具有sudo权限的用户登录 给root用户设置密码:打开一个te ...

  5. SourceTree 将本地已有的git项目推送到远程git仓库

    1.在远程git仓库创建对应的项目: 2.用命令行生成本地的ssh key; 3.把公钥粘贴远程仓库对应的位置: 4.SourceTree 设置远程仓库的地址: 5.把本地对应的分支推送到远程仓库: ...

  6. 学习篇之String()

    // 3个特殊的引用类型:Boolean,Number,String var s1 = "some text"; ,); // me t ,); // me ,-); // so ...

  7. css实现页面居中的一种方法

    在网页制作的过程中,为方便读者的阅读,会把网页内容限定在一个较小的方框中,并居中显示,如何实现这一功能呢? 1)把正文放在一个<div>标签中,只要这个标签居中整个网页就居中了. < ...

  8. java_JDBC字段对应

    地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm ...

  9. 微端游戏启动器launcher的制作之下载篇(系列一)

    首先第一篇先讲一讲launcher最核心的功能---下载功能. 这个部分估计得好几篇才能写完,东西比较多也比较杂,慢慢来吧,我的东西也在继续改进中...... 从web上下载文件需要用到几个类,Htt ...

  10. Error:(2, 0) Plugin with id 'com.github.dcendents.android-maven' not found. <a href="openFile:I:\API\PermissionGen-master\permissiongen\build.gradle">Open File</a>

    不上图说个*** 报这个错的原因是因为 你在project中的build.gradle 少写了两句话 所以报这个错 你只需要在build.gradle中添加 classpath 'com.github ...