如何在Gradle中惰性地获取主源集
我需要为所有子项目配置源jar。我定义了以下如何在Gradle中惰性地获取主源集,gradle,gradle-kotlin-dsl,Gradle,Gradle Kotlin Dsl,我需要为所有子项目配置源jar。我定义了以下子项目配置: subprojects { apply(plugin = "java-library") val sourcesJar = tasks.registering(Jar::class) { archiveClassifier.set("sources") from(the<SourceSetContainer>().named("main").get().allJava)
子项目
配置:
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)
}
}
子项目{
应用(plugin=“java库”)
val sourcesJar=tasks.registing(Jar::class){
archiveClassifier.set(“源”)
from(名为(“main”).get().allJava的()
}
任务。命名为(“汇编”){
dependsOn(sourcesJar)
}
}
当我尝试运行/gradlew tasks
时,我在子项目中收到一个异常,表示:
“SourceSetContainer”类型的扩展不存在。当前注册的扩展类型:[ExtraPropertiesExtension]
我的假设是,对扩展的get()
方法的访问会导致问题,但如果没有问题,我就无法引用所需的allJava
源代码。那么,如何通过使用配置避免API来实现期望的结果呢
使用Kotlin DSL在Gradle 5.2.1上运行。我找到了可行的解决方案。问题是,当调用
函数时()
是从任务
类型中提取的,这就是它抱怨缺少扩展的原因。解决方案是在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
)
}
}
子项目{
申请{
插件()
}
val sourcesJar by tasks.registing(Jar::class){
archiveClassifier.set(“源”)
从(
//从项目实例获取扩展
project.the().named(“main”).get().allJava
)
}
}