Gradle-タスク

Gradleビルドスクリプトは、1つ以上のプロジェクトについて記述します。各プロジェクトは、さまざまなタスクで構成されています。タスクは、ビルドが実行する作業の一部です。タスクには、いくつかのクラスのコンパイル、クラスファイルの個別のターゲットフォルダーへの保存、JARの作成、Javadocの生成、またはいくつかの成果のリポジトリへの公開が含まれる場合があります。

この章では、タスクとは何か、およびタスクを生成して実行する方法について説明します。

タスクの定義

Taskは、ビルドスクリプトにタスクを定義するために使用されるキーワードです。次の名前のタスクを表す例を見てください。hello それは印刷します tutorialspoint。次のスクリプトをコピーして、という名前のファイルに保存しますbuild.gradle。このビルドスクリプトは、tutorialspoint文字列を出力するために使用されるタスク名helloを定義します。

task hello {
   doLast {
      println 'tutorialspoint'
   }
}

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

tutorialspoint

ショートカット(記号を表す)を指定することで、このhelloタスクを簡略化できます。 <<)に doLastステートメント。このショートカットを上記のタスクに追加するとhello 次のスクリプトのようになります。

task hello << {
   println 'tutorialspoint'
}

上記のスクリプトは、 gradle –q hello コマンド。

タスクを定義する際のいくつかのバリエーションがあります。それを見てください。次の例はタスクを定義しますhello

次のコードをコピーしてに保存します build.gradle ファイル。

task (hello) << {
   println "tutorialspoint"
}

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

tutorialspoint

タスク名に文字列を使用することもできます。同じhelloの例を見てください。ここでは、タスクとして文字列を使用します。

次のコードをコピーしてに保存します build.gradle ファイル。

task('hello') << {
   println "tutorialspoint"
}

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

tutorialspoint

タスクを定義するために代替構文を使用することもできます。つまり、create()メソッドを使用してタスクを定義しています。以下に示す同じhelloの例を見てください。

以下のコードをコピーしてに保存します build.gradle ファイル。

tasks.create(name: 'hello') << {
   println "tutorialspoint"
}

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

tutorialspoint

タスクの検索

ビルドファイルで定義したタスクを見つけたい場合は、それぞれの標準プロジェクトプロパティを使用する必要があります。つまり、各タスクは、タスク名をプロパティ名として使用して、プロジェクトのプロパティとして使用できます。

タスクにプロパティとしてアクセスする次のコードを調べてください。

以下のコードをコピーしてに保存します build.gradle ファイル。

task hello

println hello.name
println project.hello.name

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

hello
hello

タスクコレクションからすべてのプロパティを使用することもできます。

次のコードをコピーしてに保存します build.gradle ファイル。

task hello

println tasks.hello.name
println tasks['hello'].name

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

hello
hello

タスクを使用してタスクのパスにアクセスすることもできます。このために、タスク名、相対パス、または絶対パスを使用してgetByPath()メソッドを呼び出すことができます。

以下のコードをコピーしてに保存します build.gradle ファイル。

project(':projectA') {
   task hello
}
task hello

println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q hello

出力:

:hello
:hello
:projectA:hello
:projectA:hello

タスクへの依存関係の追加

タスクを別のタスクに依存させることができます。つまり、1つのタスクが完了すると、他のタスクのみが開始されます。各タスクは、タスク名で区別されます。タスク名のコレクションは、そのタスクコレクションによって参照されます。別のプロジェクトのタスクを参照するには、プロジェクトのパスをそれぞれのタスク名のプレフィックスとして使用する必要があります。

taskXからtaskYに依存関係を追加する次の例。

以下のコードをコピーしてに保存します build.gradleファイル。次のコードを見てください。

task taskX << {
   println 'taskX'
}
task taskY(dependsOn: 'taskX') << {
   println "taskY"
}

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。これを実行する必要があります。build.gradle ファイルストア。

C:\> gradle –q taskY

出力:

taskX
taskY

上記の例は、タスクの名前を使用してタスクへの依存関係を追加しています。Taskオブジェクトを使用して依存関係を定義する、タスクの依存関係を実現する別の方法があります。

taskYがtaskXに依存している同じ例を取り上げますが、タスク参照名の代わりにタスクオブジェクトを使用しています。

次のコードをコピーしてに保存します build.gradle ファイル。

task taskY << {
   println 'taskY'
}
task taskX << {
   println 'taskX'
}
taskY.dependsOn taskX

コマンドプロンプトで次のコマンドを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q taskY

出力:

taskX
taskY

上記の例は、タスクの名前を使用してタスクへの依存関係を追加しています。タスクオブジェクトを使用して依存関係を定義するという、タスクの依存関係を実現する別の方法があります。

ここでは、taskYがtaskXに依存しているのと同じ例を取り上げますが、タスク参照名の代わりにタスクオブジェクトを使用しています。それを見てください。

以下のコードをコピーしてに保存します build.gradleファイル。次のコードを見てください。

task taskX << {
   println 'taskX'
}
taskX.dependsOn {
   tasks.findAll { 
      task → task.name.startsWith('lib') 
   }
}
task lib1 << {
   println 'lib1'
}
task lib2 << {
   println 'lib2'
}
task notALib << {
   println 'notALib'
}

コマンドプロンプトで次のコマンドを実行します。上記のスクリプトを実行します。これを実行する必要があります。build.gradle ファイルストア。

C:\> gradle –q taskX

出力:

lib1
lib2
taskX

タスクへの説明の追加

タスクに説明を追加できます。この説明は、実行時に表示されますGradle tasks。これは、descriptionキーワードを使用することで可能になります。

次のコードをコピーしてに保存します build.gradleファイル。次のコードを見てください。

task copy(type: Copy) {
   description 'Copies the resource directory to the target directory.'
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
   println("description applied")
}

コマンドプロンプトで次のコマンドを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q copy

コマンドが正常に実行されると、次の出力が得られます。

description applied

タスクのスキップ

タスクのスキップは、述語クロージャーを渡すことで実行できます。これは、タスクのメソッドまたはクロージャがStopExecutionException タスクの実際の作業が実行される前。

次のコードをコピーしてに保存します build.gradle ファイル。

task eclipse << {
   println 'Hello Eclipse'
}

// #1st approach - closure returning true, if the task should be executed, false if not.
eclipse.onlyIf {
   project.hasProperty('usingEclipse')
}

// #2nd approach - alternatively throw an StopExecutionException() like this
eclipse.doFirst {
   if(!usingEclipse) {
      throw new StopExecutionException()
   }
}

コマンドプロンプトで次のコマンドを実行します。build.gradleファイルが保存されている場所でこれを実行する必要があります。

C:\> gradle –q eclipse

タスク構造

タスクを操作する場合、Gradleにはさまざまなフェーズがあります。まず、タスクのクロージャで直接指定されたコードが実行される構成フェーズがあります。構成ブロックは、後で実際に実行されるタスクだけでなく、使用可能なすべてのタスクに対して実行されます。

構成フェーズの後、実行フェーズでコードが実行されます。 doFirst または doLast 実際に実行されるタスクのクロージャ。