如何在Kotlin版Gradle中为ShadowJar配置compileClasspath?
ShadowJar Groovy配置转Kotlin Gradle实现方案
问题背景
ShadowJar官方文档提供的Groovy配置代码如下:
shadowJar { configurations = [project.configurations.compileClasspath] }
将该代码直接应用到Kotlin版Gradle项目时,会出现类型不匹配错误:
Type mismatch: inferred type is Array<NamedDomainObjectProvider<Configuration>>, but (Mutable)List<FileCollection!>! was expected
解决方案
在Kotlin DSL中,需要显式处理NamedDomainObjectProvider<Configuration>类型的配置对象,以下两种写法均可解决问题:
写法一:调用get()获取配置实例
shadowJar { configurations = listOf(project.configurations.compileClasspath.get()) }
写法二:使用files()转换为FileCollection
shadowJar { configurations = files(project.configurations.compileClasspath) }
原因说明
Kotlin DSL中project.configurations.compileClasspath返回的是延迟加载的提供者对象(NamedDomainObjectProvider<Configuration>),而Groovy会自动隐式解包该对象。上述两种写法通过显式获取实例或转换类型,匹配了shadowJar配置所需的List<FileCollection>类型要求。
内容的提问来源于stack exchange,提问作者DWR
相关产品推荐
相关产品推荐

