我需要为我所有的子标记配置源jar。我有以下subprojects
配置定义:
subprojects {
apply(plugin = "java-library")
val sourcesJar = tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(the<SourceSetContainer>().named("main").get().allJava)
}
tasks.named("assemble") {
dependsOn(sourcesJar)
}
}
当我尝试运行./gradlew tasks
时,我会在我的子标题中收到一个例外,说:
不存在类型的" sourcesetContainer"类型的扩展。当前注册的扩展类型:[左Popertiesextension]
我的假设是,对扩展的get()
方法的访问会导致问题,但是没有此,我就无法指我所需的allJava
来源。那么如何通过使用配置回避API来实现所需的结果?
用Kotlin DSL在Gradle 5.2.1上运行。
我找到了工作解决方案。问题在于,当您调用the<T>()
函数时,它取自Task
类型,这就是为什么它抱怨缺乏扩展。解决方案是在project
实例上调用the<T>()
函数:
subprojects {
apply {
plugin<JavaLibraryPlugin>()
}
val sourcesJar by tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(
// take extension from project instance
project.the<SourceSetContainer>().named("main").get().allJava
)
}
}