我需要为我的所有子项目配置源 jar。我定义了以下子项目
配置:
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 任务
时,我的子项目中收到一个异常:
Extension of type 'SourceSetContainer' does not exist. Currently registered extension types: [ExtraPropertiesExtension]
我的假设是对扩展的 get()
方法的访问会导致问题,但如果没有这个问题,我就无法引用我需要的 allJava
源。那么如何使用配置避免API达到预期的结果呢?
使用 Kotlin DSL 在 Gradle 5.2.1 上运行。
最佳答案
我找到了可行的解决方案。问题是当你调用the<T>()
时函数取自Task
type 这就是它提示缺少扩展的原因。解决办法是调用the<T>()
功能于 project
像这样的实例:
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
)
}
}
关于gradle - 如何在 Gradle 中延迟获取主要 sourceSets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55106664/