42

A)

task build << {  
  description = "Build task."  
  ant.echo('build')  
}

B)

task build {  
  description = "Build task."  
  ant.echo('build')  
}

タイプ B では、入力時にタスク内のコードが実行されているように見えることに気付きましたgradle -t。さまざまな使用可能なタスクをすべてリストしただけでも、ant は「build」をエコーし​​ます。タイプ B でも実際に説明が表示されます。ただし、タイプ A では、実行可能なタスクを一覧表示するときにコードが実行されず、実行時に説明が表示されませんgradle -t。ドキュメントは、これら 2 つの構文 (私が見つけた) の違いには触れていないようで、どちらの方法でもタスクを定義できるということだけです。

4

1 に答える 1

56

最初の構文はタスクを定義し、タスクの実行時に実行されるコードを提供します。2 番目の構文はタスクを定義し、すぐに実行してタスクを構成するコードを提供します。例えば:

task build << { println 'this executes when build task is executed' }
task build { println 'this executes when the build script is executed' }

実際、最初の構文は次と同等です。

task build { doLast { println 'this executes when build task is executed' } }

したがって、上記の例では、構文 A の場合、説明を設定するコードはタスクが実行されるまで実行されないため、説明は gradle -t に表示されません。これは、gradle -t を実行しても発生しません。

構文 B の場合、ant.echo() を実行するコードは、gradle -t を含む gradle の呼び出しごとに実行されます。

実行するアクションとタスクの説明の両方を提供するには、次のいずれかを実行できます。

task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }
于 2010-05-05T05:12:18.877 に答える