Gradle 5.0正式版出来有几天了,这个工具的发展速度还真是惊人。前些天我看到gradle 5 rc版的时候还在想正式版什么时候出,没想到rc版没过几天正式版就出来了。那么正好,就来介绍一下gradle 5.0正式版加入的一些新功能吧。
依赖版本对齐
项目中引用的第三方包多了,难免出现引入了同一个包的不同版本,导致冲突的情况发生。依赖版本对齐这个功能就是为了解决这种情况而出现的。如果要对齐依赖版本,首先需要一个逻辑组(platform),platform规定了要使用的依赖版本,它可以是我们声明的依赖版本,也可以是由其他地方导入的BOM文件。在遇到了不同版本的情况下,都会对齐到platform中规定的版本上。
下面是官方文档的例子:
dependencies {
// 导入了BOM文件, 会覆盖其他地方声明的版本
implementation(enforcedPlatform("org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE"))
// define dependencies without versions
implementation("com.google.code.gson:gson")
implementation("dom4j:dom4j")
// 这里的版本会被对齐到BOM中声明的版本
implementation("org.codehaus.groovy:groovy:1.8.6")
}
Kotlin DSL 1.0
Gradle官方很早就开始开发基于Kotlin的DSL了,在Gradle 5.0中Kotlin DSL正式版终于现身了,这意味着我们可以在生产项目中使用Kotlin DSL了。和默认的Groovy DSL相比,由于Kotlin DSL是静态的,所以可以提供更多的代码补全、提示、语法高亮等支持。
如果想要使用Kotlin DSL,但是还是不太熟悉Kotlin DSL的语法也没有关系,Gradle官方早就写了一大堆示例项目,相信你看完以后肯定就了解如何使用了。连接在这里。
Gradle构建初始化功能
gradle init
任务现在增加了一些很实用的功能:
- 交互模式,初始化的时候可以在交互模式中输入信息;
- Kotlin类库和程序,现在可以在初始化的时候生成Kotlin类库和程序类型;
- 用推荐的配置生成构建,init任务现在会使用
implementation
、testImplementation
和testRuntimeOnly
配置来代替原来的compile
、testCompile
和testRuntime
。 - 配置项目和代码包名,现在init任务提供了参数来设置项目和源代码的包名;
- 创建资源文件夹,现在init任务还会创建空的
resource
文件夹; - 创建
.gitignore
文件。
可搜索的文档
这个改进属于官方文档的改进,现在官方文档基于Algolia添加了搜索框,可以搜索你想要的内容。
任务超时
现在任务可以指定一个超时值,当执行时间超过的时候会停止。
解析依赖时的HTTP重试
现在当Gradle通过HTTP访问远程仓库的时候,如果失败,会在拉黑这个仓库之前重试。
性能改进
以低优先级进程方式启动
现在Gradle可以使用--priority low
命令行参数或者org.gradle.priority=low
属性作为低优先级进程启动,这可以保证IDE和终端即使在繁重的任务时始终处于可响应状态。
还有一些性能改动,感兴趣可以参考官方文档。
Java 11支持
现在可以使用Java 11来运行Gradle。
这个功能其实也挺重要的,之前在升级到Java 11的时候我发现一些Gradle构建失败了,现在可以正常运行它们了。
提升的功能
之前很多功能都处于测试和开发状态,现在它们作为正式特性出现在Gradle中了。官方文档有一个很长的列表,这里只简单列出一部分:
- 之前在4.0中提升的特性
- 并行任务执行
- 持续构建
- 组合构建
-
java-gradle-plugin
插件 -
distribution
插件 -
jacoco
插件
更新日志还有很多地方我没有介绍,有兴趣的可以查看官方文档。