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

Posted 安卓开发资源分享

tags:

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


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



1.7

Gradle教程第一章:

1.7持续完善

不断的建立是完善的特征。这意味着它是不完整的,在Gradle生产的质量还没有。这也意味着该工具用户指南一章是一个进展中的工作。




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


目录

1.7.1 如何开始与持续构建

1.7.2什么因素会影响后续的构建

1.7.3局限性与解决方案


通常情况下,让Gradle来执行一个单一的任务可以通过指令执行。Gradle将确定需要执行的任务来满足实际要求和设置,执行它们直到停止工作,并到下一个请求。一个连续的构建Gradle将满足初步构建请求,请求不同(直到停止),通过执行构建时也不同,发现先前建立的结果现在已经过时了。例如,如果你编写java源文件生成java类文件,一个连续的建立会自动启动一个编译文件,当源文件更改时,连续构建将自动启动编译。


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

如何启动和停止连续建立?

一个连续的构建可以通过--continuous-T切换到Gradle,以及定义要完成的工作的任务、开关和参数的列表。例如,gradle build --continuous这运行有相同的效果gradle build,但是Gradle并不是在完成时退出,而是等待对构建输入更改发生变化时,gradle build将自动执行一次又一次重复的过程。

如果Gradle是连接到一个交互式的输入源,如终端,不断退出Ctrl - D(在微软Windows,也需要按ENTER(回车)RETURN返回之后按Ctrl - D)。如果Gradle不依附于一种交互式输入源(例如运行脚本的一部分),构建过程必须终止(例如使用kill命令或类似命令),如果构建是通过工具API执行的,则可以使用工具API的取消机制来取消构建。


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




1.7.2什么因素会影响

随后的构建?

 在这个时候,唯一的变化是注意任务的输入。Gradle看到变化就在开始执行任务。没有其他变化将启动构建。例如,构建脚本和建造逻辑的更改不会引发构建在构建配置期间读取的文件更改,不是执行,也不会启动构建。为了合并这些更改,必须手动重新启动连续构建。

 考虑一个构建,建立使用java插件,使用传统的文件系统布局。如下图可视化的


任务图gradle build

图1.7.1 JAVA插件任务图

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

以下重点任务图的使用在相应的目录,输入文件:

compileJava

src/main/java

processResources

src/main/resources

compileTestJava

src/test/java

processTestResources

src/test/resources


假设最初的建立是成功的(即build任务及其依赖项没有错误),文件的变化,或添加/删除文件,上述地点将启动一个新的版本。如果一个变化是一个java源文件SRC /main/ Java构建将触发并且调度所有任务安排。Gradle的增量构建支持确保执行时,实际受更改影响的任务。

如果变化的主要原因java源码编译失败,随后的变化测试源SRC /test/ Java不会启动新的构建。由于测试源取决于主要源,在主源已更改之前,没有任何建立要点,可能会修复编译错误。每次构建后,只有实际执行的任务的输入将为 监控变化。

连续构建绝对不能与编译相匹配。它适用于所有类型的任务。例如,在processresources副本任务和过程的文件src/main/resources以便包含在内置JAR中。因此,此目录中任何文件的更改也将启动构建。


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


1.7.3局限性与解决方案

当前实施持续建设有几个问题需要注意。这些可能在将来的Gradle版本中得到解决。

1.7.3.1构建循环

Gradle在任务执行之前开始观察更改。如果任务在执行时修改自己的输入,则Gradle将检测到更改并触发新的构建。如果每次执行任务,则会再次修改输入,构建将被触发 这不是连续构建的唯一。 修改自己的输入的任务在运行“正常”时不会被视为最新的,而不会持续构建。

如果您的构建进入这样的构建周期,您可以通过查看由Gradle更改的文件列表来跟踪任务。在识别每次构建过程中更改的文件之前,应该查找具有 该文件作为输入。在某些情况下,这可能是显而易见的(例如,Java文件使用compileJava编译)。在其他情况下,您可以使用 - infologging来查找由于已识别的任务而过期的任务文件。

1.7.3.2限制与JAVA9

由于类的访问限制java 9有关,Gradle不能设置一些操作系统特定的选项,这意味着:

在Mac OS X中,Gradle将调查文件的变化每10秒而不是每2秒。

在Windows上,Gradle必须使用单独的文件监视器(如Linux / Mac OS),这可能导致连续构建不再适用于非常大的项目。


1.7.3.3性能和稳定性

JDK文件查看工具依赖于Mac OS X上的低效文件系统轮询(参见:JDK-7133447)。这可以显着延迟具有许多源文件的大型项目的更改通知。


另外,观看机制可能会在Mac OS X上死机,这样会显示出来,因为Gradle似乎没有注意到文件的更改。如果您怀疑这种情况正在发生,请退出连续构建并重新启动。


在Linux上,OpenJDK执行文件监视服务有时可能会遗漏文件系统事件(参见:JDK-8145981)。

1.7.3.4对符号链接的更改

创建或删除符号链接到文件将启动构建。

修改符号链接的目标不会导致重建。

创建或删除到目录的符号链接不会导致重建。

在符号链接的目标目录中创建新文件不会导致重建。

删除目标目录不会导致重建。

1.7.3.5不考虑构建逻辑的更改

当前的实现不会在后续生成中重新计算生成模型。这意味着对任务配置的更改或构建模型的任何其他更改都将被有效地忽略。



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




以上是关于Gradle教程第一章:1.7持续完善的主要内容,如果未能解决你的问题,请参考以下文章

Gradle教程第一章:安装

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

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

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

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

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