如何在Gradle中懒惰地获得主要源



我需要为我所有的子标记配置源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
    )
  }
}

相关内容

  • 没有找到相关文章

最新更新