Gradleを学ぼうとしています。私が好む学習スタイルは、何が起こっているのかを低レベルで理解することです。そのために、 DSLリファレンスに関してドキュメントの例6.1で何が起こっているのかを解釈しようとしています。
task hello {
doLast {
println 'Hello world!'
}
}
このスクリプトがのコンテキストで実行されることを理解していますProject
。Project
したがって、ドキュメントから、オーバーロードされたメソッドがいくつかあることがわかりtask(...)
ます。署名を見て、最後の引数としてクロージャを持つものを選択する必要があります。そして、ここを渡していないので、Map
呼び出されているメソッドはであると仮定しtask(String name, Closure closure)
ます。
ただし、私が苦労しているのは、このスクリプトでリテラル文字列hello
がにマップされる方法String
です。
別の例は例6.7です:
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
task(Map<String, ?> args, String name)
ここでは、メソッドのフォームを呼び出していると仮定します。だが、
- 繰り返しますが、リテラル文字列はどのようにし
taskX
てString
? - リテラルを構成するために括弧が使用されていない場合、括弧
Map
内の部分はどのようにしてMap
? - どのメソッドが呼び出されているかを正しく理解していれば、DSLのドキュメントと比較して、スクリプトで引数が間違った順序で指定されていませんか?
- 括弧を使用した構文は、メソッド呼び出しのように世界中を検索します。これは、不明なメソッドとして
Project
解決するオブジェクトへの委任を示している可能性があります。ただし、AFAIK、メソッド呼び出しは、直前taskX
のメソッド呼び出しを考えると、この時点では構文的に有効ではありません。task
ご覧のとおり、構文例がDSLリファレンスガイドにどのようにマッピングされるかについて少し混乱しているため、草の根レベルで何が起こっているのかを実際に理解するのは少し難しいです。
ありがとう!