Gradle依赖语法:括号包裹与单/双引号直接使用的区别及场景
Gradle依赖两种写法的区别与选用时机
本质区别:语法规范与DSL适配
这两种写法核心是Gradle不同DSL(领域特定语言)的语法差异:
implementation 'com.squareup.moshi:moshi-kotlin:1.9.3'是Groovy DSL的简写语法。Groovy允许省略函数调用的括号,直接把字符串参数传给implementation方法。implementation("io.coil-kt:coil:2.2.2")是显式函数调用写法,这种语法在Groovy DSL和Kotlin DSL中都通用,但Kotlin DSL必须使用带括号的形式(Kotlin语法不允许省略函数调用括号)。
具体差异点
语法兼容性
- Groovy DSL:两种写法都合法,还支持双引号字符串(
implementation "xxx"),双引号支持字符串插值(比如implementation "com.example:lib:$version"),单引号则是纯静态字符串。 - Kotlin DSL:只能用带括号的写法,字符串可单/双引号,双引号支持
$插值,单引号不支持。
- Groovy DSL:两种写法都合法,还支持双引号字符串(
功能扩展性
- 带括号的写法更便于扩展依赖配置,比如添加排除规则、指定classifier时,写法更清晰:
// Groovy DSL implementation("io.coil-kt:coil:2.2.2") { exclude group: 'androidx.appcompat' }// Kotlin DSL implementation("io.coil-kt:coil:2.2.2") { exclude(group = "androidx.appcompat") } - 当需要用命名参数传递依赖信息(比如拆分group、name、version)时,必须用带括号的写法:
implementation(group: 'io.coil-kt', name: 'coil', version: '2.2.2')
- 带括号的写法更便于扩展依赖配置,比如添加排除规则、指定classifier时,写法更清晰:
选用时机
- 若项目用Groovy DSL(
build.gradle):- 静态依赖字符串:两种写法任选,看团队编码风格;
- 需要字符串插值:优先用双引号的简写(
implementation "com.example:lib:$version")或带括号的双引号写法; - 要扩展依赖配置:带括号的写法更直观。
- 若项目用Kotlin DSL(
build.gradle.kts):- 必须使用带括号的写法,这是Kotlin语法的强制要求。
- 追求跨DSL兼容:优先用带括号的写法,它在两种DSL中都能正常运行。
内容的提问来源于stack exchange,提问作者cluster1
相关产品推荐
相关产品推荐

