Я пытаюсь написать плагин, который добавляет зависимости project.dependencies
в соответствии с информацией, собранной в объекте расширения плагина. Но это кажется невозможным.
Действительно, данные из объекта расширения доступны только в новой задаче или в закрытии project.afterEvaluate
, но зависимости, добавленные в этих местах, игнорируются.
Следующий код пытается добавить зависимость в afterEvaluate
, но зависимость игнорируется:
apply plugin: MyPlugin
myplugin {
version '1.0'
}
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('myplugin', MyPluginExtension)
project.afterEvaluate {
def version = project.myplugin.version
project.dependencies.add("compile", "org.foo:bar:$version") // --> ignored
}
}
}
class MyPluginExtension {
def version
}
В следующем коде инжекция зависимостей работает, но у меня нет доступа к объекту расширения:
apply plugin: MyPlugin
myplugin {
version '1.0'
}
class MyPlugin implements Plugin<Project> {
void apply(Project project) {
project.extensions.create('myplugin', MyPluginExtension)
def version = project.myplugin.version // == null
project.dependencies.add("compile", "org.foo:bar:$version") // --> fail because $version is null
}
}
class MyPluginExtension {
def version
}
Есть ли решение?