Как лениво получить основные исходные наборы в Gradle - PullRequest
0 голосов
/ 11 марта 2019

Мне нужно настроить исходные файлы 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 'не существует.В настоящее время зарегистрированы типы расширений: [ExtraPropertiesExtension]

Я предполагаю, что доступ к методу get() расширения вызывает проблемы, но без этого я не могу ссылаться на источники allJava, которые мне нужны.Итак, как достичь желаемого результата с помощью API избегания конфигурации?

Работа на Gradle 5.2.1 с Kotlin DSL.

1 Ответ

1 голос
/ 21 марта 2019

Я нашел рабочее решение. Проблема в том, что когда вы вызываете функцию the<T>(), она берется из типа Task, поэтому она жалуется на отсутствие расширения. Решение состоит в том, чтобы вызвать 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
    )
  }
}
...