私はルートプロジェクトとサブプロジェクト(:child
)を持っています。 ルートのビルドは、次のように次のようになります。rootで定義されたクローズが子に表示されない
foo
foo
:bar
:child:bar
child:bar
parent:bar
このメイクセンス:
def foo = {
println("foo")
}
allprojects {
task bar << {
println(project.name + ":bar")
}
afterEvaluate {
foo()
}
}
はgradle bar
プリントを実行します。しかし、私はfoo
を子のビルドファイルから呼び出す必要があります(サブモジュールのいくつかだけが呼び出されるためです)。 documentationは十分に明確であるように思わ:In a multi-project build, sub-projects inherit the properties and methods of their parent project
しかし、エラーでchild/build.gradle
結果に上記の「afterEvaluate」ブロックを移動:Could not find method foo() for arguments [] on project ':child' of type org.gradle.api.Project
。
なぜこれが起こり、どうすればこの問題を解決できますか?私は、さまざまなバリエーションの全体の束を試みた - 周りdef
移動(ext
にbuildscript
に、allprojects
を、allprojects.ext
に、その内線可変製造、代わりの方法などの)異なるそれを参照(rootProject.foo
、rootProject.foo()
として、ext.foo()
など) - 何も動作していないようです。
アイデア?
[OK]を、この作品のようになります。
参照。さて、次の質問は、_all_モジュールが評価された後、これを実行するにはどうすればよいのでしょうか?私の次の問題は、別の子供がそれに依存していることを知る前にchild/fooが実行されることです。それを修正するトリックはありますか?私はそれを 'rootProject.afterEvaluate'と置き換えようとしましたが、それはまったく何もしないようです:/ – Dima