プラグイン拡張オブジェクトで収集された情報に従って、依存関係をproject.dependencies
に追加するプラグインを作成しようとしています。しかし、それは不可能と思われる。Gradleカスタムプラグイン:拡張オブジェクトから依存関係を追加する
実際、拡張オブジェクトのデータは新しいタスクまたは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
}
解決策はありますか?それはまだ、関連するかどう
あなたは一つの方法または別では、拡張子にアクセス延期する必要があります。 'project.afterEvaluate'での依存関係の追加がうまくいかない理由は私には分かりません。プラグインを使用するコードに問題がある可能性があります。 –
ありがとう、私はコードを簡略化するために簡略化しました。ここでコード全体(https://github.com/tbruyelle/ResetUnreadSms/blob/aa-plugin/build.gradle)を見つけることができます。アノテーションからJavaクラスを生成するライブラリ用のアンドロイドプラグインです。プラグインは拡張オブジェクトなしでうまく動作しますが、質問で説明したように、拡張オブジェクトからのデータを依存関係に注入したい場合は失敗します。 – tbruyelle
cc @PeterNiederwieserあなたが私の答えによって通知されていない場合に備えて... – tbruyelle