Eklenti uzantı nesnesinde toplanan bilgilere göre project.dependencies
'a bağımlılıklar ekleyen bir eklenti yazmaya çalışıyorum. Ama imkansız gibi görünüyor.Gradle özel eklentisi: eklenti nesnesinden bağımlılık ekle
Gerçekten de, uzantı nesnesindeki veriler yalnızca yeni bir görevde veya project.afterEvaluate
kapamasında kullanılabilir, ancak bu yerlere eklenen bağımlılıklar dikkate alınmaz.
şu kod afterEvaluate
yılında bağımlılık eklemeye çalışır ancak bağımlılık göz ardı edilir: bağımlılık enjeksiyon işleri Aşağıdaki kodda
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
}
ama erişimi yok uzantı nesnesi:
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
}
Çözüm var mı? O hâlâ alakalı eğer
tek bir ya da bu şekilde, uzatma erişen ertelemek gerekecek. Bana 'project.afterEvaluate' bağımlılıkları eklemek neden işe yaramaz bana açık değil. Eklentiyi kullanan kodla ilgili bir sorun olabilir. –
Teşekkürler, temiz kalmak için kodu sadeleştirdim, tüm kodu [burada bulabilirsiniz] (https://github.com/tbruyelle/ResetUnreadSms/blob/aa-plugin/build.gradle). Ek açıklamalardan java sınıfları üreten bir kütüphane için bir android eklentidir. Eklenti, uzantı nesnesi olmaksızın iyi çalışır, ancak bağımlılıkların söz konusu açıklandığı gibi, uzantı nesnelerinden veri ile enjekte edilmesi durumunda başarısız olur. – tbruyelle
cc @PeterNiederwieser, cevabım tarafından bana bilgi verilmemesi durumunda ... – tbruyelle