Gradleのこれらのタスク定義構文の違いは何ですか?

StackOverflow https://stackoverflow.com/questions/2767888

  •  03-10-2019
  •  | 
  •  

質問

a)

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

b)

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

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

役に立ちましたか?

解決

最初の構文はタスクを定義し、タスクの実行時に実行されるコードを提供します。 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の場合、gradle -tを含むgradleのすべての呼び出しに対してant.echo()を実行するコードは実行されます-t

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

task build(description: 'some description') << { some code }
task build { description = 'some description'; doLast { some code } }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top