У меня есть проект с двумя подпроектами: gradle-plugin
и plugin-consumer
. Я хочу применить плагин от gradle-plugin
до plugin-consumer
. Я пытался сделать это:
// plugin-consumer/build.gradle
buildscript {
dependencies {
classpath project(':gradle-plugin')
}
}
apply plugin: 'my.plugin.id'
Но меня приветствовала следующая ошибка:
A problem occurred configuring project ':plugin-consumer'.
> Cannot use project dependencies in a script classpath definition.
Я предполагаю, что это не поддерживается, потому что для этого потребуется полная сборка gradle-plugin
до plugin-consumer
можно настроить.
К счастью, я могу использовать fileTree
зависимость для достижения sh моей цели:
// plugin-consumer/build.gradle
buildscript {
dependencies {
classpath fileTree(includes: ['*.jar'], dir: '../gradle-plugin/build/libs')
}
}
apply plugin: 'my.plugin.id'
Это работает, но похоже на массивный взлом и приводит к "начальной загрузке" проблемы ".
Например, я не могу clean
gradle-plugin
, потому что (удаленный) файл jar необходим для настройки plugin-consumer
, что необходимо для (пере) сборки gradle-plugin
. К счастью, этого можно избежать, если всегда запускать build
сразу после clean
(в том же «запуске», так сказать). Это можно сделать вручную (gradle clean build
) или автоматически (с clean.finalizedBy(build)
). Опять же, это работает , но похоже на хак.
Наконец, мой актуальный вопрос: есть ли лучший способ сделать это?
Обратите внимание что gradle-plugin
является независимым плагином, который используется не только plugin-consumer
, поэтому buildSrc
, к сожалению, не является подходящим решением.