Gradle 7.0发布

2021-04-12 01:22:00

此版本默认情况下,您可以观看文件系统,以使增量构建更快,扩展了对Java 16的构建项目的支持,并使用Apple Silicon处理器(例如M1)为Mac提供支持。

此版本还引入了集中依赖版本的功能预览,可以构建验证错误,使您的构建更可靠,并更轻松地为设置文件创建“详细信息”插件。许多孵育特征已被促进稳定。

这些发行说明只列出了从地表6.8以来的新的新的。您还可以看到Gradle 6.0到7.0之间所有更改的亮点。

我们要感谢以下社区成员对此发布Gradle的贡献:

请参阅Gradle升级指南,以了解弃用,在升级到Gradle 7.0时,打破更改和其他注意事项。

此版本包含增量开发的进一步改进 - 软件开发过程的一部分,在那里频繁变化。

在增量构建中,选中输入和输出文件以确定需要重建的内容。此功能通常会节省大量时间;但是,它增加了一些I / O开销,当自以前的构建以来时,在大型项目中可能会出现明显。

文件系统观看是在Gradle 6.5中作为选项功能的选择,并标记为Pradle 6.7的生产准备。启用后,Gradle会保留它在从每个构建中的文件系统中读取的构建和跳过读取的内存中的文件系统。这显着减少了以来,以确定自上一个构建以来更改的磁盘I / O量。

现在,在所有受支持的平台上默认情况下,现在在包括最近版本的Windows,Linux和MacOS的平台上启用了这种优化。

此版本包含用于Android项目的增量更改的性能改进,尤其是使用喷涂机的增量更改。

例如,与Gradle 6.8相比,Santa Tracker Android项目的非ABI变化的Ordbledebug提高了12%:

在早期的Gradle版本中,Mere的存在足以触发Gradle以执行所有构建rc任务,并将生成的buildsrc.jar添加到BuildScript类路径,导致不必要的性能开销或缓存未命中。

Gradle现在将忽略一个空的buildsrc目录,如果检测到构建文件和/或源文件,则只会生成buildsrc.jar。

空构建rc.jar不会被添加到BuildScript类路径中,避免这可能导致的缓存未命中。

以前的Gradle版本能够在带有一些缺点的苹果硅处理器上运行新Mac:

使用本机ARM JDK,将禁用Rich Console和文件系统等Gradle功能。

使用英特尔JDK,Gradle将通过Rosetta2兼容层的大约半速运行。

使用此版本,现在使用本机ARM JDK支持每个功能。如果您'重新使用苹果芯片的新Mac,您应该使用Gradle使用本机ARM JDK以获得最佳性能。

在以前的Gradle版本中,在Java 16上运行Gradle本身导致错误。可以使用Java 16使用Java 16使用Java 16使用禁用增量编译。

截至Gradle 7.0,运行成分本身和使用Java 16构建JVM项目都得到了完全支持。

有许多方法可以在多项目构建中的项目之间共享依赖版本。例如,用户可以直接在构建脚本(在EXT块)中的版本或依赖性协调,外部文件(例如依赖eventEncies.gradle),即使是专用插件。然而,没有任何标准机制来实现每种方法的优势。

使用此版本,Gradle将版本目录推出作为实验特征。版本目录使构建作者能够将其第三方依赖项中的依赖项坐标(组,工件,版本)集中,并以类型安全的方式声明实际依赖项。

要启用此实验功能,请在settings.gradle(.kts)文件中添加以下行:

然后,您可以使用Pradle / libs.versions.toml文件从项目的根目录中声明目录内容:

[版本] groovy =" 3.0.5" [库] groovy-core = {module =" org.codehaus.groovy:groovy&#34 ;,版本.ref =" groovy" groovy" groovy&# 34; groovy-json = {module =" org.codehaus.groovy:groovy-json&#34 ;, version.ref =" groovy" groovy-nio = {module =" org.codehaus.groovy:groovy-nio",sworge.ref =" groovy" } commons-lang3 = {group =" org.apache.commons",名称=" commons-lang3",版本= {strictly =" [3.8,4.0 [&# 34;,更喜欢=" 3.9" [捆绑] groovy = [" groovy-core"" groovy-json&#34 ;," groovy-nio"]

之后,在任何子项目的任何构建脚本中,您可以使用类型安全的访问者声明依赖项:

声明依赖项这种方式允许轻松再利用所有模块中的依赖项坐标,提供IDE中的内容辅助并降低错误的风险。更重要的是,它还提供在升级库时更改版本的单个位置。

此外,常用在一起的依赖项可以在捆绑包中组织,并在具有单行代码中的相关项目中声明。目录也可以在不同的构建之间共享。

对于插件作者,或更高级的使用情况,API可在设置中提供以声明版本目录。

此功能旨在集中声明,对依赖解决过程没有影响。这意味着已解决的版本仍然可以与版本目录中声明的版本不同。例如,如果传递依赖性需要更高版本,则依赖关系的已解决版本可以高于目录中声明。

在Gradle 7.0之前,通过使用字符串符号,例如项目(":某些:路径"),唯一能在多项目构建中声明依赖性的唯一方法。

此释放GRADLE为项目访问器添加了一个实验特征,它提供了类型安全性,并启用IDE中的代码完成。

具有更多嵌套级别的项目:Commons:Utils:数字将使用以下符号访问:

为了支持JDK 16并及时了解最新的Groovy版本,Gradle已升级以在Groovy DSL构建脚本中使用Groovy 3。 Groovy 3附带新的解析器和多个新功能和能力,使互操作性与新的Java功能更轻松。

Groovy 2和3之间存在一些不兼容,可能在升级到Gradle 7.0时导致问题。

您只使用Groovy为您的生产代码(您可以选择您需要的Groovy版本) 请参阅“Gradle升级指南”以了解有关升级构建和插件的更多信息,以与Groovy 3兼容。 为了了解有关Groovy 3.0中的改进和新功能的更多信息,请参阅Groovy项目' S发行说明。 依赖关系锁定是一种机制,用于确保使用动态依赖版本时的可再现构建。 此版本默认为改进的依赖性锁定文件格式,从而在使用此功能的大多数项目中导致更少的锁定文件。 具体来说,它会导致每个项目的一个文件而不是每个项目每个配置文件。 将它们迁移到新文件格式时,Gradle将自动清理先前的锁文件。 此外,在使用新格式时,可以配置锁定文件名和位置。

到目前为止,插件{}仅支持社区插件的固定版本。现在接受所有版本字符串符号Gradle支持,包括+或最新。

我们建议使用Pradle 7使用插件{}块来应用插件7.旧应用插件:将来将弃用机制。

请注意,动态版本将向构建过程引入非确定性行为,并应明智地使用。您可以使用依赖项锁定以保存使用动态版本时解决的依赖项。

Gradle使用许多优化以确保构建尽可能快地执行。这些优化依赖于要定义的任务的输入和输出。 Gradle已经对任务进行了一些验证来检查它们是否定义。

如果任务失败输入/输出验证,则Gradle现在将在不使用并行执行,最新的检查和构建缓存的益处。有关更多信息,请参阅运行时验证上的用户手册。

现在标记的潜在问题之一是消耗另一个问题的任务,而不声明明确或推断的任务依赖性。 Gradle现在检测消费者和生产者之间缺失的依赖关系,并在这种情况下发出警告。有关更多信息,请参阅输入和输出验证的用户手册。

这允许图书馆,如番石榴,清楚地区分针对标准-JVM和Android优化的变体。然后基于当前项目类型(Java或Android)自动选择最佳变体,

Gradle 7在插件分辨率期间查找新的org.gradle.plugin.api-version属性。这允许插件作者为不同的Gradle版本发布其插件的不同变体。此用户手册部分介绍了新属性如何与特征变体一起使用,以向插件添加其他variants。

到目前为止,开发插件作为复合构建的一部分,以便在会议插件中组织构建逻辑,仅适用于项目插件(在build.gradle(.kts)文件中应用的插件)。设置插件(在Settings.gradle(.kts)文件中应用的插件)始终必须以隔离开发并发布到二进制存储库。

此版本在“设置文件”中引入了一个新的DSL构造,包括插件构建。包含的构建可以提供项目和设置插件。

上面的示例假定包含的构建定义了带有ID My.Settings-Plugin的设置插件。

由构建生成的库组件,虽然插件管理块不会自动对包括构建自动可见。但是,可以包含相同的构建作为插件构建和普通库构建:

这种区别反映了存储库声明的Gradle优惠 - 存储库用于分别指定插件依赖项和生产依赖项。

促销的功能是在以前版本的Gradle中孵育的功能,但现在支持并受到向后兼容性的。有关详细信息,请参阅“功能生命周期”的“用户手册”部分。

在Gradle 7.0中,我们将以下课程或方法移出潜伏阶段。 已知问题是已发现发布的问题,这些发布与此版本中所做的更改直接相关。 我们喜欢从Gradle社区获得贡献。 有关贡献的信息,请参阅gradle.org/contribute。 如果您在此版本中找到问题,请在遵守我们的问题指南的情况下提交GitHub问题的错误。 如果你'重新确定你遇到一个bug,请使用论坛。 我们希望您能与Gradle建立幸福,我们通过Twitter或GitHub期待您的反馈。