Gradle教程第一章:1.1Gradle命令行使用

Posted 安卓开发资源分享

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle教程第一章:1.1Gradle命令行使用相关的知识,希望对你有一定的参考价值。

1

目录

1.1 执行多个任务

1.2 排除任务

1.3 在发生故障时继续构建

1.任务名称缩写

1.5 选择要执行的构建

1.6 强制执行任务

1.7 获取有关您的构建的信息

1.8 Dry Run

1.9 总结

本章介绍了Gradle命令行的基本内容。您使用gradle命令运行一个构建,您已经在前面的章节中看到过。


Gradle教程第一章:1.1Gradle命令行使用


1。执行多个任务

通过在命令行上列出每个任务,可以在单个构建中执行多个任务。例如,命令gradle 编译测试将执行编译和测试任务。Gradle将按照在命令行上列出的顺序执行任务,并将执行每个任务的依赖项。每个任务只执行一次,不管它如何被包含在构建中:不论它是在命令行上指定的,还是作为另一个任务的依赖项,或者两者兼而有之。让我们来看一个例子。

窗体顶端

定义了以下四个任务。dist和test都依赖于编译任务。在这个构建脚本中运行gradle dist test,结果只执行一次编译任务。

1.1 任务依赖关系

Gradle教程第一章:1.1Gradle命令行使用


Gradle教程第一章:1.1Gradle命令行使用

1.1 执行多个任务


build.gradle

task compile {

    doLast {

        println 'compiling source'

    }

}


task compileTest(dependsOn: compile) {

    doLast {

        println 'compiling unit tests'

    }

}


task test(dependsOn: [compile, compileTest]) {

    doLast {

        println 'running unit tests'

    }

}


task dist(dependsOn: [compile, test]) {

    doLast {

        println 'building the distribution'

    }

}

的输出 gradle dist test

> gradle dist test

:compile

compiling source

:compileTest

compiling unit tests

:test

running unit tests

:dist

building the distribution


BUILD SUCCESSFUL in 0s

1 actionable tasks: 1 executed

由于每个任务仅会被调用一次,所以调用gradle test test与调用gradle test效果是相同的.


Gradle教程第一章:1.1Gradle命令行使用

1.2排除任务

可以使用- x命令行选项来排除一个任务,并提供排除任务的名称。让我们尝试一下上面的示例构建文件。例1.2排除任务

gradle dist -x test的输出 


> gradle dist -x test

:compile

compiling source

:dist

building the distribution


BUILD SUCCESSFUL in 0s

2 actionable tasks: 2 executed


从这个示例的输出,可以看到的 test任务没有执行,即使这是一个依赖的 dist的任务。你也会注意到 test任务的依赖任务,例如 compileTest也没有执行。而像compiletest和其它任务同时依赖的任务仍然会被调用.

Gradle教程第一章:1.1Gradle命令行使用

1.3发生故障时继续构建

默认情况下只要有任务调用失败Gradle就是中断执行.这可能会使调用过程更快,这允许构建完整的早,但隐藏其他故障发生。但隐藏了可能发生的其他故障。为了在一个构建执行中发现尽可能多的失败,你可以使用—continue选项。

采用了--continue选项,Gralde会调用每一个任务以及它们依赖的任务. 而不是一旦出现错误就会中断执行.所有错误信息都会在最后被列出来. 一旦某个任务执行失败,那么所有依赖于该任务的子任务都不会被调用.例如由于test任务依赖于complie任务,所以如果compile调用出错,test便不会被直接或间接调用. 

Gradle教程第一章:1.1Gradle命令行使用

1.4任务名称简化

在命令行上指定任务时,不必提供任务的全称。只需要提供足够的任务名称来唯一地标识任务。例如,在上面的示例构建中,可以通过运行gradle d来执行任务

1.3。简化任务名称

gradle di的输出 结果

> gradle di

:compile

compiling source

:compileTest

compiling unit tests

:test

running unit tests

:dist

building the distribution


BUILD SUCCESSFUL in 0s

1 actionable tasks: 1 executed

还可以将每个单词缩写成camel case任务名称。例如,可以通过运行gradle compTest甚至是gradle cT来执行task compileTest1.1简化的驼峰任务名称

gradle cT的输出结果

> gradle cT

:compile

compiling source

:compileTest

compiling unit tests


BUILD SUCCESSFUL in 0s

2 actionable tasks: 2 executed

还可以使用这些缩写 -x命令行选项。


Gradle教程第一章:1.1Gradle命令行使用

1.5选择执行哪些构建

调用gradle时,默认情况下总是会构建当前目录下的文件, 可以使用-b参数选择构建的文件,并且当你使用此参数时settings.gradle将不会生效,看下面的例子: settings.gradle文件是不习惯。例子:

1.5 使用构建文件选择项目

subdir/myproject.gradle

task hello {

    doLast {

        println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."

    }

}

的输出 gradle -q -b subdir/myproject.gradle hello

> gradle -q -b subdir/myproject.gradle hello

using build file 'myproject.gradle' in 'subdir'.

或者,可以使用 –p参数来指定要使用的项目目录。对多项目构建应该使用 –p参数而不是 –b参数

1.6 选择构建目录

gradle -q -p subdir hello的输出结果

> gradle -q -p subdir hello

using build file 'build.gradle' in 'subdir'.


Gradle教程第一章:1.1Gradle命令行使用

1.6强制执行任务

许多任务,特别是由Gradle提供的任务,支持增量构建。这样的任务可以决定他们是否需要运行,或者基于他们的输入或输出自上次运行以来已经发生了变化。可以很容易地识别出在构建运行过程中,当Gradle在其名称旁边显示最新的文本时,参与增量构建的任务。有时,你可能想要迫使Gradle运行所有的任务,而忽略任何最新的检查。如果是这样,只需使用—重新运行任务选项。这是在运行任务时执行任务时的输出:

迫使任务运行例:

gradle doIt的输出结果

> gradle doIt

:doIt UP-TO-DATE

 gradle --rerun-tasks doIt的输出结果

> gradle --rerun-tasks doIt

:doIt

注意,这将强制执行所有需要执行的任务,而不仅仅是在命令行上指定的任务。这有点像运行干净,但是没有构建生成的输出被删除。

Gradle教程第一章:1.1Gradle命令行使用

1.7获取信息关于你的构建

Gradle提供了几个内置的任务,这些任务显示了的构建的特定细节。这有助于理解构建的结构和依赖关系,以及调试问题。

除了如下所示的内置任务之外,还可以使用项目报告插件将任务添加到项目中,从而生成这些报告。


Gradle教程第一章:1.1Gradle命令行使用

1.7.1 清单项目

运行gradle项目为提供所选项目的子项目列表,显示在层次结构中。这是一个例子:


1.8 获取项目信息

gradle -q projects的输出结果

> gradle -q projects


------------------------------------------------------------

Root project

------------------------------------------------------------


Root project 'projectReports'

+--- Project ':api' - The shared API for the application

\--- Project ':webapp' - The Web application implementation


To see a list of the tasks of a project, run gradle <project-path>:tasks

For example, try running gradle :api:tasks

报告显示了每个项目的描述,如果指定的话。可以通过设置描述属性为项目提供描述:


1.9为项目提供描述

build.gradle

description = 'The shared API for the application'

Gradle教程第一章:1.1Gradle命令行使用

1.7.2.任务清单

运行gradle任务给列出所选项目的主要任务的列表。该报告显示了项目的默认任务,如果有的话,以及对每个任务的描述。下面是这个报告的一个例子:

1.10获取信息的任务

gradle -q tasks的输出结果

> gradle -q tasks


------------------------------------------------------------

All tasks runnable from root project

------------------------------------------------------------


Default tasks: dists


Build tasks

-----------

clean - Deletes the build directory (build)

dists - Builds the distribution

libs - Builds the JAR


Build Setup tasks

-----------------

init - Initializes a new Gradle build.

wrapper - Generates Gradle wrapper files.


Help tasks

----------

buildEnvironment - Displays all buildscript dependencies declared in root project 'projectReports'.

components - Displays the components produced by root project 'projectReports'. [incubating]

dependencies - Displays all dependencies declared in root project 'projectReports'.

dependencyInsight - Displays the insight into a specific dependency in root project 'projectReports'.

dependentComponents - Displays the dependent components of components in root project 'projectReports'. [incubating]

help - Displays a help message.

model - Displays the configuration model of root project 'projectReports'. [incubating]

projects - Displays the sub-projects of root project 'projectReports'.

properties - Displays the properties of root project 'projectReports'.

tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects).

To see all tasks and more detail, run gradle tasks --all

To see more detail about a task, run gradle help --task <task>

默认情况下,此报告只显示分配给任务组的任务,即所谓的可见任务。可以通过设置任务的组属性来完成此任务。还可以设置description属性,以提供在报告中包含的描述。一个描述包含在报告中。

1.11。改变任务报告的内容

build.gradle

dists {

    description = 'Builds the distribution'

    group = 'build'

}

可以使用- all选项在任务列表中获得更多信息。使用此选项,任务报告列出项目中的所有任务,包括未分配给任务组的任务,即所谓的隐藏任务。这是一个例子:

1.12.获取更多信息的任务

gradle -q tasks --all的输出 

> gradle -q tasks --all


------------------------------------------------------------

All tasks runnable from root project

------------------------------------------------------------


Default tasks: dists


Build tasks

-----------

clean - Deletes the build directory (build)

api:clean - Deletes the build directory (build)

webapp:clean - Deletes the build directory (build)

dists - Builds the distribution

api:libs - Builds the JAR

webapp:libs - Builds the JAR


Build Setup tasks

-----------------

init - Initializes a new Gradle build.

wrapper - Generates Gradle wrapper files.


Help tasks

----------

buildEnvironment - Displays all buildscript dependencies declared in root project 'projectReports'.

api:buildEnvironment - Displays all buildscript dependencies declared in project ':api'.

webapp:buildEnvironment - Displays all buildscript dependencies declared in project ':webapp'.

components - Displays the components produced by root project 'projectReports'. [incubating]

api:components - Displays the components produced by project ':api'. [incubating]

webapp:components - Displays the components produced by project ':webapp'. [incubating]

dependencies - Displays all dependencies declared in root project 'projectReports'.

api:dependencies - Displays all dependencies declared in project ':api'.

webapp:dependencies - Displays all dependencies declared in project ':webapp'.

dependencyInsight - Displays the insight into a specific dependency in root project 'projectReports'.

api:dependencyInsight - Displays the insight into a specific dependency in project ':api'.

webapp:dependencyInsight - Displays the insight into a specific dependency in project ':webapp'.

dependentComponents - Displays the dependent components of components in root project 'projectReports'. [incubating]

api:dependentComponents - Displays the dependent components of components in project ':api'. [incubating]

webapp:dependentComponents - Displays the dependent components of components in project ':webapp'. [incubating]

help - Displays a help message.

api:help - Displays a help message.

webapp:help - Displays a help message.

model - Displays the configuration model of root project 'projectReports'. [incubating]

api:model - Displays the configuration model of project ':api'. [incubating]

webapp:model - Displays the configuration model of project ':webapp'. [incubating]

projects - Displays the sub-projects of root project 'projectReports'.

api:projects - Displays the sub-projects of project ':api'.

webapp:projects - Displays the sub-projects of project ':webapp'.

properties - Displays the properties of root project 'projectReports'.

api:properties - Displays the properties of project ':api'.

webapp:properties - Displays the properties of project ':webapp'.

tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects).

api:tasks - Displays the tasks runnable from project ':api'.

webapp:tasks - Displays the tasks runnable from project ':webapp'.


Other tasks

-----------

api:compile - Compiles the source files

webapp:compile - Compiles the source files

docs - Builds the documentation


Gradle教程第一章:1.1Gradle命令行使用

1.7.3.获取关于任务的更多信息

运行gradle帮助——任务someTask为提供与多项目构建中给定任务名称相匹配的特定任务或多个任务的详细信息。以下是详细信息的一个例子:

1.13。获取任务的详细帮助

gradle -q help --task libs的输出结果 

> gradle -q help --task libs

Detailed task information for libs


Paths

     :api:libs

     :webapp:libs


Type

     Task (org.gradle.api.Task)


Description

     Builds the JAR


Group

     build


这些信息包括完整的任务路径、任务类型、可能的命令行选项和给定任务的描述。

Gradle教程第一章:1.1Gradle命令行使用

1.7.4.清单项目依赖项

这些信息包括完整的任务路径、任务类型、可能的命令行选项和给定任务的描述。

1.11.获取信息的依赖性

gradle -q dependencies api:dependencies的输出结果 

webapp:dependencies

> gradle -q dependencies api:dependencies webapp:dependencies


------------------------------------------------------------

Root project

------------------------------------------------------------


No configurations


------------------------------------------------------------

Project :api - The shared API for the application

------------------------------------------------------------


compile

\--- org.codehaus.groovy:groovy-all:2.1.10


testCompile

\--- junit:junit:1.12

     \--- org.hamcrest:hamcrest-core:1.3


------------------------------------------------------------

Project :webapp - The Web application implementation

------------------------------------------------------------


compile

+--- project :api

|    \--- org.codehaus.groovy:groovy-all:2.1.10

\--- commons-io:commons-io:1.2


testCompile

No dependencies

由于依赖报告可以得到很大的支持,因此将报告限制在特定的配置中是很有用的。这是通过可选配置参数实现的:

1.15.通过配置过滤依赖项报告

gradle -q api:dependencies --configuration testCompile的输出结果

> gradle -q api:dependencies --configuration testCompile


------------------------------------------------------------

Project :api - The shared API for the application

------------------------------------------------------------


testCompile

\--- junit:junit:1.12

     \--- org.hamcrest:hamcrest-core:1.3

Gradle教程第一章:1.1Gradle命令行使用

1.7.5.清单项目buildscript依赖关系

运行 gradle buildEnvironment看到buildscript依赖性的选择项目,以类似的方式 gradle dependencies看到软件的依赖关系。

Gradle教程第一章:1.1Gradle命令行使用

1.7.6了解一个特定的依赖

运行gradle buildEnvironment可视化了所选项目的构建脚本依赖关系,类似于层次依赖关系是如何可视化构建软件的依赖关系的。

1.16.了解特定的依赖关系

 gradle -q webapp:dependencyInsight --dependency groovy的输出结果

--configuration compile

> gradle -q webapp:dependencyInsight --dependency groovy --configuration compile

org.codehaus.groovy:groovy-all:2.1.10

\--- project :api

     \--- compile


这个任务对于研究依赖项解析、找出某些依赖项来自哪里以及为什么选择某些版本非常有用。有关更多信息,请参见DependencyInsightReportTask类的API文档。

内置的依赖项insight任务是“帮助”任务组的一部分。任务需要配置依赖项和配置。报告寻找匹配指定配置中指定的依赖项规范的依赖项。如果应用了Java相关的插件,依赖项insight任务将预先配置为“compile”配置,因为通常它是我们感兴趣的编译依赖项。应该通过命令行“依赖项”选项指定感兴趣的依赖项。如果不喜欢默认设置,可以通过“—配置”选项选择配置。更多信息参见DependencyInsightReportTask类的API文档。

Gradle教程第一章:1.1Gradle命令行使用

1.7.7.清单项目属性

运行gradle属性会为提供所选项目的属性列表。这是输出中的一个片段:

1.17.属性信息

gradle -q api:properties的输出结果 

> gradle -q api:properties


------------------------------------------------------------

Project :api - The shared API for the application

------------------------------------------------------------


allprojects: [project ':api']

ant: org.gradle.api.internal.project.DefaultAntBuilder@12315

antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@12315

artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@12315

asDynamicObject: DynamicObject for project ':api'

baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@12315

buildDir: /home/user/gradle/samples/userguide/tutorial/projectReports/api/build

buildFile: /home/user/gradle/samples/userguide/tutorial/projectReports/api/build.gradle

Gradle教程第一章:1.1Gradle命令行使用

1.7.8.分析构建

profile命令行选项将在构建运行时记录一些有用的时序信息,并将报告写入到构建/报告/概要目录。该报告将使用构建运行时的时间命名。

本报告列出了配置阶段和任务执行的摘要时间和细节。配置和任务执行的时间是先处理最昂贵的操作。任务执行结果还表明,如果跳过了任何任务(以及原因),或者没有跳过的任务没有工作。

构建利用buildSrc目录将生成一个第二buildSrc概要报告 buildSrc/build目录中。

Gradle教程第一章:1.1Gradle命令行使用

Gradle教程第一章:1.1Gradle命令行使用

1.8 Dry Run

有时,感兴趣的是在命令行中指定给定任务集合的顺序执行哪些任务,但不希望执行任务。可以使用- m选项来实现。例如,如果运行“gradle - m clean compile”,将看到作为干净和编译任务的一部分执行的所有任务。这是任务任务的补充,它向展示了可以执行的任务

Gradle教程第一章:1.1Gradle命令行使用

1.9 总结

在本章中,已经看到了一些可以从命令行中获得执行的东西。

135editor   一个有用的公众号
Gradle教程第一章:1.1Gradle命令行使用
长按,识别二维码,加关注





以上是关于Gradle教程第一章:1.1Gradle命令行使用的主要内容,如果未能解决你的问题,请参考以下文章

Gradle教程第一章:1.7持续完善

Gradle教程第一章:2.0故障排查

Gradle教程第一章:1.5依赖关系

Gradle教程第一章:1.8复合构建

Gradle教程第一章:1.6多项目建立

Gradle教程第一章:1.4构建与打包