Как я могу разложить сборку Gradle на несколько файлов? - PullRequest
0 голосов
/ 02 ноября 2018

Я пишу плагин Gradle, который содержит коллекцию нескольких блоков независимой конфигурации, которые будут применяться к любому проекту, использующему плагин.

Я хочу, чтобы фрагменты были очень отделены друг от друга, чтобы другие люди не добавляли несвязанную логику в существующее место, а также чтобы было лучше видно, что на самом деле настраивает плагин.

Итак, я думал, что смогу сделать это:

class CommonChecksPlugin implements Plugin<Project> {
  @Override
  void apply(Project project) {
    project.apply plugin: 'base'

    def resolveFile = { filename ->
      new URL(buildscript.sourceURI.toURL(), filename)
    }

    project.apply from: resolveFile('configuration1.gradle')
    project.apply from: resolveFile('configuration2.gradle')
  }
}

Пример configurationN.gradle:

task 'checkSomething', type: CheckSomething

Проблема в том, что этот класс Java CheckSomething не может быть решен.

Есть ли разумный способ сделать это, кроме как просто сдаться и переместить все подпрограммы в полные классы Groovy? Я не хочу переносить их в классы, потому что я хочу применить те же проверки к самому проекту плагина, и кажется, что их сложно применить, если они требуют компиляции.

1 Ответ

0 голосов
/ 02 ноября 2018

Примененный скрипт имеет загрузчик классов, отличный от плагина, он не наследует загрузчик классов buildscript, поэтому задача не находится в пути к классам. Вы можете сделать следующее:

project.ext.CheckSomething = CheckSomething
project.apply from: resolveFile('configuration1.gradle')

См. https://discuss.gradle.org/t/buildscript-configurations-classpath-not-available-in-apply-from-scripts/1391

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...