体验Gradle(4):文件、日志和命令行

本篇将谈谈Gradle中文件和日志的基本知识,同时也将讨论Gradle的命令行操作。

Gradle里有三种文件相关的概念,分别是:

  • 文件,对应普通文件,类型是java.io.File。
  • 文件集合,对应一组文件,类型是org.gradle.api.file.FileCollection。
  • 文件树,对应一个层次文件,如目录树,类型是org.gradle.api.file.FileTree。

这三类对象分别可以通过Project对象的file、files和fileTree方法得到。它们的使用都非常简单,参考文档中已有叙述,这里就不再详说。

既然我们可以用Groovy书写构建逻辑,要是更进一步,可以使用日志岂不是更好?对此,Gradle当然有所考虑。Gradle里定义了6种日志级别,由高到低依次为:ERROR、QUIET、WARNNING、LIFECYCLE、INFO和DEBUG。其中的QUIET和LIFECYCLE是Gradle特有的,分别用于只显示重要信息和构建过程信息。其余的则跟平常咱们见到的都差不多。这些级别都有对应的命令行参数:

  • 不指定,LIFECYCLE或更高
  • -q,QUIET或更高
  • -i,INFO或更高
  • -d,DEBUG或更高

至于日志的输出,我们可以:

  • 使用println输出到标准输出上,Gradle会自动把标准输出的内容写到日志系统的QUIET级别
  • 使用logger属性。
  • logger.quiet('An info log message which is always logged.')
    logger.error('An error log message.')
    logger.warn('A warning log message.')
    logger.lifecycle('A lifecycle info log message.')
    logger.info('An info log message.')
    logger.debug('A debug log message.')
    logger.trace('A trace log message.')
    

当然,你还可以使用其它的日志工具。这时,只需把相应的jar放到classpath中,然后象普通Java对象那样去使用即可。

有时我们在构建逻辑了使用了外部工具或Lib,要想捕获它们的输出,需要使用Project的captureStandardOutput方法。本系统的第一篇中已经给出了一个详细的例子,请参考。

到目前为止,如何在命令行中使用Gradle其实应该不是一个陌生的话题了。但是参考文档给出了更多关于这方面的信息:

  • 执行多个任务,gradle task1 task2。这里值得注意的是,Gradle对于每个任务只执行一次,如果task1和task2之间存在的依赖的话,每个也只能执行一次,而不会因为出现在命令行里而执行多次。换句话讲,即便是gradle task1 task1,那么task1也只会执行一次。
  • 将某个任务排除在执行路径之外,gradle task1 -x task2,假设task1依赖task2,按照这种写法,task2将不会执行,而只执行task1。但如果task2还有其它依赖的话,这些依赖仍会执行。
  • 在执行任务时,并不需要给出任务的全名,只需要给出能帮助Gradle唯一确定一个任务的信息即可。如:gradle t1,就会对应task1的执行,前提是没有其它类似task11,task12的任务。
  • -b和-p参数分别对应构建文件名和项目路径。如:gradle -b subdir/myproject.gradle hello。
  • 获得构建文件的相关信息可以使用:--tasks,列出所有任务;--dependencies,按项目列出依赖;--properties,列出每个项目的属性。如:gradle --tasks。
  • dry run,这种执行用在想要知道命令行中task的执行顺序,但又不真正执行task的时候,相当于“伪执行”。使用-m参数,如:gradle -m clean compile,将显示这个两个任务执行中涉及的任务,但又不会真正去执行它们。

本系列的其它部分:

By foxgem - Posted on 17 七月 2010