翻訳: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 コマンドラインが構築され、現在のディレクトリの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

パブリッシュ・タスクを選択すると、依存タスクがある場合でも、実行前にバージョン番号に影響します.