翻訳:Gradleの構築スクリプトの入門
23531 ワード
テキストアドレスhttp://www.gradle.org/docs/current/userguide/tutorial_using_tasks.html
6.1. Projects and tasksプロジェクトとタスク
Gradleの中のすべてのものは2つの概念に基づいています. projects エンジニアリングと tasksタスク.
1つのGradle構築は、1つ以上のエンジニアリングで構成されています.一つの工事 プロジェクトのいくつかのコンポーネントです.これは構築するプロジェクトに正確に依存しています.たとえば、1つのエンジニアリングはjarライブラリファイルであってもよいし、webアプリケーションであってもよい.他のプロジェクトjarから集約されたzipパッケージであってもよい.プロジェクトの導入など、やるべきことを識別するだけでなく、すでに完了していることもあります.ああ、散らかっていますね.木がありますか.大丈夫です.Gradleの約束に基づく配置は工事に対して明確な定義があります.見てみてください.
各プロジェクトは多くのタスクで構成されています(antとは思いませんか?)1つのタスクは、構築プロセスのいくつかの原子フラグメントです.コンパイル、パッケージング、ドキュメントの生成、ライブラリに公開することもできます.
さあ、寝ないで、座って工事を始めましょう.まず簡単な工事で、それから責任のある任務と工事の誘導があります.
6.2. Hello world牛刀初試
使用 gradle コマンドラインが構築され、現在のディレクトリの
自分でやらないの?
Example 6.1. The first build script
現在のディレクトリの下で
What does
我々の例では、-qパラメータがよく使用されます.Gradleのログ出力を抑制し、タスク出力のみを抑制します.これにより、さわやかに見えます.必要でなければ完全に使用できません.18章では、ログで各パラメータが出力に与える影響について詳しく説明します.
Example 6.2. Execution of a build script
おおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
Antに似ているのではないでしょうか.ほほほ.Gradleの任務はAntの目標に相当しますが、もっと強いです.政府は任務が目標よりもGradleに適していると繰り返し考えています.しかし、これはAntの任務と衝突しています(antはjavac、copyなどの命令を任務と呼んでいます).ああ、だから私たちは今任務を言って、あなたはそれがいつもGradleの任務を指していることを覚えていて、つまりAntの中の目標です.必要なら、私たちはAntの任務がどうなのかを明確に言います.
6.3. A shortcut task definitionタスク定義の新しいメソッド--ショートカット定義
タスクをより簡明に定義する方法があります.
Example 6.3. A task definition shortcut
私たちは括弧でHelloタスクを定義しました.これからはそうします.
6.4. Build scripts are codeはどこでcodingしませんか?
構築スクリプトの強さはGroovyの強さのおかげで、次のようになります.
Example 6.4. Using Groovy in Gradle's tasks
Output of
次の
Example 6.5. Using Groovy in Gradle's tasks
Output of
6.5. Task dependenciesタスク依存
あなたはきっととっくに任務の間に依存できることを考えていたでしょう(仕方なく、誰があなたをエンジニアにして、私は心理学者です)
Example 6.6. Declaration of dependencies between tasks
Output of
タスクに依存する他のタスクは事前に定義しなくてもよい
Example 6.7. Lazy dependsOn - the other task does not exist (yet)
Output of
見たでしょう私はでたらめを言っていません.taskXはtaskYに依存し、taskYは後に定義されています.これはマルチエンジニアリング構築にとって重要です.タスク依存のヒエナ関係の議論はSection 15.4, “Adding dependencies to a task”です.
注意して、ショートカットでタスクを引用することはできませんよ.
6.6. Dynamic tasks動的タスク
Groovyの強さは、タスクを定義するだけでなく、タスクを動的に作成することもできます.
Example 6.8. Dynamic creation of a task
Output of
6.7. Manipulating existing tasks操作タスク
Antとは異なり、Gradleのタスクが作成されると、APIによってアクセスできます.たとえば、依存度を増やすことができます.
Example 6.9. Accessing a task via API - adding a dependency
Output of
あるいは任務の行為を増やすことができます
Example 6.10. Accessing a task via API - adding behaviour
Output of
何度も呼び出すことができます
6.8. Shortcut notationsショートカット記号
とっくに気づいているでしょう.間違いありません.タスクはスクリプトのプロパティで、アクセスできます.
Example 6.11. Accessing task as a property of the build script
Output of
プラグインが提供するボックスタスクについて.(e.g.
6.9. Extra task properties新属性
タスク属性値をextで追加できます:
Example 6.12. Adding extra properties to a task
Output of
このように属性を混入するのはタスクに限らず、興味を持って見てください.
Section 13.4.2, “Extra properties” .
6.10. Using Ant Tasks Antタスクの使用
AntタスクはGradle界の一等公民であり、GradleはGroovyを通じてAntタスクを牛に追い詰めた.Groovyには
Example 6.13. Using AntBuilder to execute ant.loadfile target
Output of
あなたがやりたいことはAntでできます.あなただけができます.もっとChapter 17, Using Ant from Gradleを見てください.
6.11. Using methodsメソッド
Gradleは吊り下げていますが、スクリプトの論理をどのように書くかを見てみましょう.上の例では、最初の階層は抽出方法です.
Example 6.14. Using methods to organize your build logic
Output of
後であなたは知っています:ワはどんなに幸せで、多くの工事の構築が方法を共有することができるためです.もしあなたがまだ複雑にしたいならば、Gradleも組織の方法を提供して、あなたが複雑ではないことを恐れます.私たちは1章全体をしてあなたを脅して、見に行きましょう:Chapter 59, Organizing Build Logic.
6.12. Default tasksデフォルトタスク
デフォルトのタスクは定義されており、構築に1つまたは2つ定義できます.
Example 6.15. Defining a default tasks
Output of
これと実行
6.13. Configure by DAG
後で詳しくお話しします(See Chapter 55, The Build Lifecycle)Gradleの構成フェーズと実行フェーズ.構成フェーズが終了すると、Gradleは実行するすべてのタスクを理解します(Gradleはこの情報を使用するためにフックを提供しています).実行するタスクにタスクが公開されているかどうかを確認できます.これにより、異なる変数に対して異なる値を指すことができます.
次の例では、配布タスクとパブリッシュタスクに異なるバージョン番号を示します.
Example 6.16. Different outcomes of build depending on chosen tasks
Output of
Output of
パブリッシュ・タスクを選択すると、依存タスクがある場合でも、実行前にバージョン番号に影響します.
6.1. Projects and tasksプロジェクトとタスク
Gradleの中のすべてのものは2つの概念に基づいています. projects エンジニアリングと tasksタスク.
1つのGradle構築は、1つ以上のエンジニアリングで構成されています.一つの工事 プロジェクトのいくつかのコンポーネントです.これは構築するプロジェクトに正確に依存しています.たとえば、1つのエンジニアリングはjarライブラリファイルであってもよいし、webアプリケーションであってもよい.他のプロジェクトjarから集約されたzipパッケージであってもよい.プロジェクトの導入など、やるべきことを識別するだけでなく、すでに完了していることもあります.ああ、散らかっていますね.木がありますか.大丈夫です.Gradleの約束に基づく配置は工事に対して明確な定義があります.見てみてください.
各プロジェクトは多くのタスクで構成されています(antとは思いませんか?)1つのタスクは、構築プロセスのいくつかの原子フラグメントです.コンパイル、パッケージング、ドキュメントの生成、ライブラリに公開することもできます.
さあ、寝ないで、座って工事を始めましょう.まず簡単な工事で、それから責任のある任務と工事の誘導があります.
6.2. Hello world牛刀初試
使用 gradle コマンドラインが構築され、現在のディレクトリの
build.gradle
が検索されます. ファイル(他のコンストラクションツールと同じではないでしょうか)は、コンストラクションスクリプトファイルと呼ばれます.もちろん、厳密にはコンストラクション構成スクリプトファイルです.コンストラクションスクリプトは、エンジニアリングとそのタスクを定義します.自分でやらないの?
build.gradle :
Example 6.1. The first build script
build.gradle
task hello {
doLast {
println 'Hello world!'
}
}
現在のディレクトリの下で
gradle -q hello
を実行します.What does
-q
do? 我々の例では、-qパラメータがよく使用されます.Gradleのログ出力を抑制し、タスク出力のみを抑制します.これにより、さわやかに見えます.必要でなければ完全に使用できません.18章では、ログで各パラメータが出力に与える影響について詳しく説明します.
Example 6.2. Execution of a build script
> gradle -q hello
Hello world!
おおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
Antに似ているのではないでしょうか.ほほほ.Gradleの任務はAntの目標に相当しますが、もっと強いです.政府は任務が目標よりもGradleに適していると繰り返し考えています.しかし、これはAntの任務と衝突しています(antはjavac、copyなどの命令を任務と呼んでいます).ああ、だから私たちは今任務を言って、あなたはそれがいつもGradleの任務を指していることを覚えていて、つまりAntの中の目標です.必要なら、私たちはAntの任務がどうなのかを明確に言います.
6.3. A shortcut task definitionタスク定義の新しいメソッド--ショートカット定義
タスクをより簡明に定義する方法があります.
Example 6.3. A task definition shortcut
gradle hello
task hello << {
println 'Hello world!'
}
私たちは括弧でHelloタスクを定義しました.これからはそうします.
6.4. Build scripts are codeはどこでcodingしませんか?
構築スクリプトの強さはGroovyの強さのおかげで、次のようになります.
Example 6.4. Using Groovy in Gradle's tasks
task upper << {
String someString = 'mY_nAmE'
println "Original: " + someString
println "Upper case: " + someString.toUpperCase()
}
Output of
build.gradle
> gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME
次の
Example 6.5. Using Groovy in Gradle's tasks
build.gradle
task count << {
4.times { print "$it " }
}
Output of
gradle -q upper
> gradle -q count
0 1 2 3
6.5. Task dependenciesタスク依存
あなたはきっととっくに任務の間に依存できることを考えていたでしょう(仕方なく、誰があなたをエンジニアにして、私は心理学者です)
Example 6.6. Declaration of dependencies between tasks
build.gradle
task hello << {
println 'Hello world!'
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}
Output of
gradle -q count
> gradle -q intro
Hello world!
I'm Gradle
タスクに依存する他のタスクは事前に定義しなくてもよい
Example 6.7. Lazy dependsOn - the other task does not exist (yet)
build.gradle
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}
task taskY << {
println 'taskY'
}
Output of
gradle -q intro
> gradle -q taskX
taskY
taskX
見たでしょう私はでたらめを言っていません.taskXはtaskYに依存し、taskYは後に定義されています.これはマルチエンジニアリング構築にとって重要です.タスク依存のヒエナ関係の議論はSection 15.4, “Adding dependencies to a task”です.
注意して、ショートカットでタスクを引用することはできませんよ.
6.6. Dynamic tasks動的タスク
Groovyの強さは、タスクを定義するだけでなく、タスクを動的に作成することもできます.
Example 6.8. Dynamic creation of a task
build.gradle
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
Output of
gradle -q taskX
> gradle -q task1
I'm task number 1
6.7. Manipulating existing tasks操作タスク
Antとは異なり、Gradleのタスクが作成されると、APIによってアクセスできます.たとえば、依存度を増やすことができます.
Example 6.9. Accessing a task via API - adding a dependency
build.gradle
4.times { counter ->
task "task$counter" << {
println "I'm task number $counter"
}
}
task0.dependsOn task2, task3
Output of
gradle -q task1
> gradle -q task0
I'm task number 2
I'm task number 3
I'm task number 0
あるいは任務の行為を増やすことができます
Example 6.10. Accessing a task via API - adding behaviour
build.gradle
task hello << {
println 'Hello Earth'
}
hello.doFirst {
println 'Hello Venus'
}
hello.doLast {
println 'Hello Mars'
}
hello << {
println 'Hello Jupiter'
}
Output of
gradle -q task0
> gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter
何度も呼び出すことができます
build.gradle
gradle -q hello
,これらは、それぞれタスクアクションリストの先頭と末尾に動作を追加する.実行時には順次実行され、doFirst
doLast
.6.8. Shortcut notationsショートカット記号
とっくに気づいているでしょう.間違いありません.タスクはスクリプトのプロパティで、アクセスできます.
Example 6.11. Accessing task as a property of the build script
<<
task hello << {
println 'Hello world!'
}
hello.doLast {
println "Greetings from the $hello.name task."
}
Output of
doLast
> gradle -q hello
Hello world!
Greetings from the hello task.
プラグインが提供するボックスタスクについて.(e.g.
build.gradle
)特に便利です6.9. Extra task properties新属性
タスク属性値をextで追加できます:
gradle -q hello
という名前のcompile
を追加するには はい.追加すると、とっくに定義されているようです.Example 6.12. Adding extra properties to a task
myProperty
task myTask {
ext.myProperty = "myValue"
}
task printTaskProperties << {
println myTask.myProperty
}
Output of
ext.myProperty
> gradle -q printTaskProperties
myValue
このように属性を混入するのはタスクに限らず、興味を持って見てください.
Section 13.4.2, “Extra properties” .
6.10. Using Ant Tasks Antタスクの使用
AntタスクはGradle界の一等公民であり、GradleはGroovyを通じてAntタスクを牛に追い詰めた.Groovyには
build.gradle
の牛が追い詰められているからだ.GradleがAntタスクを使用するのはAntがbuild.xmlを使用するよりも劣っていないし、強いわけではない.Example 6.13. Using AntBuilder to execute ant.loadfile target
gradle -q printTaskProperties
task loadfile << {
def files = file('../antLoadfileResources').listFiles().sort()
files.each { File file ->
if (file.isFile()) {
ant.loadfile(srcFile: file, property: file.name)
println " *** $file.name ***"
println "${ant.properties[file.name]}"
}
}
}
Output of
AntBuilder
> gradle -q loadfile
*** agile.manifesto.txt ***
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
*** gradle.manifesto.txt ***
Make the impossible possible, make the possible easy and make the easy elegant.
(inspired by Moshe Feldenkrais)
あなたがやりたいことはAntでできます.あなただけができます.もっとChapter 17, Using Ant from Gradleを見てください.
6.11. Using methodsメソッド
Gradleは吊り下げていますが、スクリプトの論理をどのように書くかを見てみましょう.上の例では、最初の階層は抽出方法です.
Example 6.14. Using methods to organize your build logic
build.gradle
task checksum << {
fileList('../antLoadfileResources').each {File file ->
ant.checksum(file: file, property: "cs_$file.name")
println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
}
}
task loadfile << {
fileList('../antLoadfileResources').each {File file ->
ant.loadfile(srcFile: file, property: file.name)
println "I'm fond of $file.name"
}
}
File[] fileList(String dir) {
file(dir).listFiles({file -> file.isFile() } as FileFilter).sort()
}
Output of
gradle -q loadfile
> gradle -q loadfile
I'm fond of agile.manifesto.txt
I'm fond of gradle.manifesto.txt
後であなたは知っています:ワはどんなに幸せで、多くの工事の構築が方法を共有することができるためです.もしあなたがまだ複雑にしたいならば、Gradleも組織の方法を提供して、あなたが複雑ではないことを恐れます.私たちは1章全体をしてあなたを脅して、見に行きましょう:Chapter 59, Organizing Build Logic.
6.12. Default tasksデフォルトタスク
デフォルトのタスクは定義されており、構築に1つまたは2つ定義できます.
Example 6.15. Defining a default tasks
build.gradle
defaultTasks 'clean', 'run'
task clean << {
println 'Default Cleaning!'
}
task run << {
println 'Default Running!'
}
task other << {
println "I'm not a default task!"
}
Output of
gradle -q loadfile
> gradle -q
Default Cleaning!
Default Running!
これと実行
build.gradle
gradle -q
6.13. Configure by DAG
後で詳しくお話しします(See Chapter 55, The Build Lifecycle)Gradleの構成フェーズと実行フェーズ.構成フェーズが終了すると、Gradleは実行するすべてのタスクを理解します(Gradleはこの情報を使用するためにフックを提供しています).実行するタスクにタスクが公開されているかどうかを確認できます.これにより、異なる変数に対して異なる値を指すことができます.
次の例では、配布タスクとパブリッシュタスクに異なるバージョン番号を示します.
Example 6.16. Different outcomes of build depending on chosen tasks
gradle clean run
task distribution << {
println "We build the zip with version=$version"
}
task release(dependsOn: 'distribution') << {
println 'We release now'
}
gradle.taskGraph.whenReady {taskGraph ->
if (taskGraph.hasTask(release)) {
version = '1.0'
} else {
version = '1.0-SNAPSHOT'
}
}
Output of
。 。 , 。
> gradle -q distribution
We build the zip with version=1.0-SNAPSHOT
Output of
build.gradle
> gradle -q release
We build the zip with version=1.0
We release now
パブリッシュ・タスクを選択すると、依存タスクがある場合でも、実行前にバージョン番号に影響します.