第11章 Gradleのコマンドラインを使う

This chapter introduces the basics of the Gradle command-line. You run a build using the gradle command, which you have already seen in action in previous chapters.

本章では、Gradleのコマンドラインについて基本的な部分を紹介します。これまで動かしてきたように、Gradleのビルドはgradleコマンドで実行します。

11.1. 複数のタスクを実行するExecuting multiple tasks

You can execute multiple tasks in a single build by listing each of the tasks on the command-line. For example, the command gradle compile test will execute the compile and test tasks. Gradle will execute the tasks in the order that they are listed on the command-line, and will also execute the dependencies for each task. Each task is executed once only, regardless of how it came to be included in the build: whether it was specified on the command-line, or as a dependency of another task, or both. Let's look at an example.

一回のビルドで、複数のタスクを実行することができます。ビルドを実行するときに、タスクを並べて指定してください。たとえば、gradle compile testというコマンドを実行すれば、compileタスクとtestタスクが実行されます。Gradleはタスクを列挙された順に実行するほか、それらが依存しているタスクも実行します。また、タスクが実行されるのはそれぞれ一度だけです。コマンドラインで明示的に指定されたタスクも、それらに依存して実行されるタスクも、またその両方に含まれるタスクも同様です。次の例を見てください。

Below four tasks are defined. Both dist and test depend on the compile task. Running gradle dist test for this build script results in the compile task being executed only once.

この例では、四つのタスクが定義されており、disttestはどちらもcompileタスクに依存しています。このビルドスクリプトを呼び出してgradle dist testと実行しても、実行された二つのタスクから依存されているcompileタスクは一度だけしか実行されません。

図11.1 Task間の依存関係Task dependencies

Task間の依存関係Task dependencies

例11.1 複数のタスクの実行

build.gradle

task compile << {
    println 'compiling source'
}

task compileTest(dependsOn: compile) << {
    println 'compiling unit tests'
}

task test(dependsOn: [compile, compileTest]) << {
    println 'running unit tests'
}

task dist(dependsOn: [compile, test]) << {
    println 'building the distribution'
}

gradle dist test の出力

> gradle dist test
:compile
compiling source
:compileTest
compiling unit tests
:test
running unit tests
:dist
building the distribution

BUILD SUCCESSFUL

Total time: 1 secs

Each task is executed only once only, so gradle test test is exactly the same as gradle test.

タスクが一度だけ実行されるということは、gradle test testと打ち込んでもgradle testと打ち込んでも、実行される処理は全く同じだということです。

11.2. タスクを除外してビルドするExcluding tasks

You can exclude a task from being executed using the -x command-line option and providing the name of the task to exclude. Let's try this with the sample build file above.

-xオプションでタスクの名前を指定することで、そのタスクを除外してビルドを実行することができます。先ほどのサンプルで試してみましょう。

例11.2 タスクの除外

gradle dist -x test の出力

> gradle dist -x test
:compile
compiling source
:dist
building the distribution

BUILD SUCCESSFUL

Total time: 1 secs

You can see from the output of this example, that the test task is not executed, even though it is a dependency of the dist task. You will also notice that the test task's dependencies, such as compileTest are not executed either. Those dependencies of test that are required by another task, such as compile, are still executed.

distタスクはtestに依存しているのですが、この例ではtestタスクは実行されていないことが分かります。また、testタスクが依存しているタスク、たとえばcompileTestタスクもやはり実行されていません。しかし、testタスクが依存しているタスクのうち、test以外からも依存されているタスク、つまりcompileタスクは実行されているのです。

11.3. エラー発生時にビルドを継続する Continuing the build when a failure occurs

By default, Gradle will abort execution and fail the build as soon as any task fails. This allows the build to complete sooner, but hides other failures that would have occurred. In order to discover as many failures as possible in a single build execution, you can use the --continue option.

デフォルトでは、タスクが失敗するとすぐにGradleは実行を中止してビルドを失敗させます。これはビルドの完了は早くなりますが、発生するかもしれない他のエラーを隠してしまうかもしれません。 一回のビルド実行でできるだけ多くのエラーを発見するには、--continueオプションを使用します。

When executed with --continue, Gradle will execute every task to be executed where all of the dependencies for that task completed without failure, instead of stopping as soon as the first failure is encountered. Each of the encountered failures will be reported at the end of the build.

--continueオプションをつけてビルドすると、エラー発生時に即ビルドが停止されるのではなく、失敗せずに完了したタスクに依存するタスクは全て実行されるようになります。 また、ビルド中に発生したエラーはビルド終了時に全てレポートされます。

If a task fails, any subsequent tasks that were depending on it will not be executed, as it is not safe to do so. For example, tests will not run if there is a compilation failure in the code under test; because the test task will depend on the compilation task (either directly or indirectly).

タスクが失敗した場合、依存関係上の後続タスクは安全に実行できないため行われません。 例えば、テストの際、コードのコンパイルでエラーが発生するとテストは実施されません。テストタスクはコンパイルタスクに直接的、間接的に依存しているからです。

11.4. タスク名の省略Task name abbreviation

When you specify tasks on the command-line, you don't have to provide the full name of the task. You only need to provide enough of the task name to uniquely identify the task. For example, in the sample build above, you can execute task dist by running gradle d:

タスク名をコマンドラインで指定するとき、タスク名をすべて入力する必要はありません。タスク名を一つに決定できるだけの文字を入力すればよいのです。先ほどの例で言えば、gradle dと入力すればdistを実行できます。

例11.3 タスク名の省略

gradle di の出力

> gradle di
:compile
compiling source
:compileTest
compiling unit tests
:test
running unit tests
:dist
building the distribution

BUILD SUCCESSFUL

Total time: 1 secs

You can also abbreviate each word in a camel case task name. For example, you can execute task compileTest by running gradle compTest or even gradle cT

キャメルケースで分割されたそれぞれの単語を省略することもできます。たとえば、compileTestというタスクだと、gradle compTestと入力したり、gradle cTと入力したりすることで実行できます。

例11.4 キャメルケースのタスク名を省略

gradle cT の出力

> gradle cT
:compile
compiling source
:compileTest
compiling unit tests

BUILD SUCCESSFUL

Total time: 1 secs

You can also use these abbreviations with the -x command-line option.

-xオプションで除外タスクを指定するときにも、同じようにタスク名を省略できます。

11.5. ビルドスクリプトを指定して実行するSelecting which build to execute

When you run the gradle command, it looks for a build file in the current directory. You can use the -b option to select another build file. If you use -b option then settings.gradle file is not used. Example:

gradleコマンドは、デフォルトではカレントディレクトリにあるビルドスクリプトを探して実行しますが、-bオプションを使えば別のビルドスクリプトを指定することもできます。次の例を見てください。 なお、-bを使うと、settings.gradleファイルは使用されなくなります。

例11.5 ビルドスクリプトを指定してビルドするプロジェクトを選択する

subdir/myproject.gradle

task hello << {
    println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."
}

gradle -q -b subdir/myproject.gradle hello の出力

> gradle -q -b subdir/myproject.gradle hello
using build file 'myproject.gradle' in 'subdir'.

Alternatively, you can use the -p option to specify the project directory to use. For multi-project builds you should use -p option instead of -b option.

別の方法として、-pオプションを指定して、使用するプロジェクトディレクトリを変更することもできます。 マルチプロジェクトの場合は、-bオプションでなく-pオプションを使用するべきです。

例11.6 プロジェクトディレクトリを使ってプロジェクトを選択する

gradle -q -p subdir hello の出力

> gradle -q -p subdir hello
using build file 'build.gradle' in 'subdir'.

11.6. ビルドに関する情報を取得するObtaining information about your build

Gradle provides several built-in tasks which show particular details of your build. This can be useful for understanding the structure and dependencies of your build, and for debugging problems.

ビルドに関する様々な情報を表示するために、組み込みのタスクがいくつか用意されています。自分の作ったビルドが今どんな構造になっているのか調べたり、何か問題が起こったときにデバッグしたりするのに役立つはずです。

In addition to the built-in tasks shown below, you can also use the project report plugin to add tasks to your project which will generate these reports.

この組み込みタスクに加えて、プロジェクトレポートプラグインというプラグインを使うこともできます。このプラグインは、これらの情報をレポートに保存するタスクをプロジェクトに追加してくれます。

11.6.1. プロジェクトの一覧Listing projects

Running gradle projects gives you a list of the sub-projects of the selected project, displayed in a hierarchy. Here is an example:

gradle projectsを実行すると、指定したプロジェクトのサブプロジェクトを一覧できます。プロジェクトの一覧は階層構造で表示されます。次の例をご覧ください。

例11.7 プロジェクトに関する情報を取得する

gradle -q projects の出力

> gradle -q projects
------------------------------------------------------------
Root project
------------------------------------------------------------

Root project 'projectReports'
+--- Project ':api' - The shared API for the application
\--- Project ':webapp' - The Web application implementation

To see a list of the tasks of a project, run gradle <project-path>:tasks
For example, try running gradle :api:tasks

The report shows the description of each project, if specified. You can provide a description for a project by setting the description property:

このレポートは、プロジェクトに説明書きが添付されている場合、その説明も表示されます。プロジェクトの説明は、プロジェクトのプロパティで設定してください。

例11.8 プロジェクトに説明を添付する

build.gradle

description = 'The shared API for the application'

11.6.2. タスクの一覧Listing tasks

Running gradle tasks gives you a list of the main tasks of the selected project. This report shows the default tasks for the project, if any, and a description for each task. Below is an example of this report:

gradle tasksを実行すると、プロジェクトに設定されているメインタスクの一覧とデフォルトタスクを表示します。さらに、タスクに説明書きが添付されていれば、その説明も表示されます。

例11.9 タスクに関する情報を取得する

gradle -q tasks の出力

> gradle -q tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Default tasks: dists

Build tasks
-----------
clean - Deletes the build directory (build)
dists - Builds the distribution
libs - Builds the JAR

Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Help tasks
----------
components - Displays the components produced by root project 'projectReports'.
dependencies - Displays all dependencies declared in root project 'projectReports'.
dependencyInsight - Displays the insight into a specific dependency in root project 'projectReports'.
help - Displays a help message.
projects - Displays the sub-projects of root project 'projectReports'.
properties - Displays the properties of root project 'projectReports'.
tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects).

To see all tasks and more detail, run with --all.

By default, this report shows only those tasks which have been assigned to a task group. You can do this by setting the group property for the task. You can also set the description property, to provide a description to be included in the report.

デフォルトでは、このレポートは何らかのタスクグループに属しているタスクしか表示されません。タスクのgroupプロパティを設定することでタスクにグループを割り当てることができます。また、このレポートでタスクに関する説明書きを表示させるには、タスクのdescriptionプロパティに説明書きを設定してください。

例11.10 タスクレポートの内容を変更する

build.gradle

dists {
    description = 'Builds the distribution'
    group = 'build'
}

You can obtain more information in the task listing using the --all option. With this option, the task report lists all tasks in the project, grouped by main task, and the dependencies for each task. Here is an example:

--allオプションを追加すると、タスクリストについてもっと多くの情報を取得できます。プロジェクトにあるすべてのメインタスクとタスク間の依存関係が表示されます。次の表示例をご覧ください。

例11.11 タスクに関してもっと多くの情報を取得する

gradle -q tasks --all の出力

> gradle -q tasks --all
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Default tasks: dists

Build tasks
-----------
clean - Deletes the build directory (build)
api:clean - Deletes the build directory (build)
webapp:clean - Deletes the build directory (build)
dists - Builds the distribution [api:libs, webapp:libs]
    docs - Builds the documentation
api:libs - Builds the JAR
    api:compile - Compiles the source files
webapp:libs - Builds the JAR [api:libs]
    webapp:compile - Compiles the source files

Build Setup tasks
-----------------
init - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating]

Help tasks
----------
components - Displays the components produced by root project 'projectReports'.
api:components - Displays the components produced by project ':api'.
webapp:components - Displays the components produced by project ':webapp'.
dependencies - Displays all dependencies declared in root project 'projectReports'.
api:dependencies - Displays all dependencies declared in project ':api'.
webapp:dependencies - Displays all dependencies declared in project ':webapp'.
dependencyInsight - Displays the insight into a specific dependency in root project 'projectReports'.
api:dependencyInsight - Displays the insight into a specific dependency in project ':api'.
webapp:dependencyInsight - Displays the insight into a specific dependency in project ':webapp'.
help - Displays a help message.
api:help - Displays a help message.
webapp:help - Displays a help message.
projects - Displays the sub-projects of root project 'projectReports'.
api:projects - Displays the sub-projects of project ':api'.
webapp:projects - Displays the sub-projects of project ':webapp'.
properties - Displays the properties of root project 'projectReports'.
api:properties - Displays the properties of project ':api'.
webapp:properties - Displays the properties of project ':webapp'.
tasks - Displays the tasks runnable from root project 'projectReports' (some of the displayed tasks may belong to subprojects).
api:tasks - Displays the tasks runnable from project ':api'.
webapp:tasks - Displays the tasks runnable from project ':webapp'.

11.6.3. タスクの使い方を詳しく表示する Show task usage details

Running gradle help --task someTask gives you detailed information about a specific task or multiple tasks matching the given task name in your multiproject build. Below is an example of this detailed information:

gradle help --task someTaskを実行すると、ある特定のタスク、マルチプロジェクトの場合は指定した名前にマッチする全てのタスクについての詳細な情報が表示されます。 表示される情報の例は以下の通りです。

例11.12 タスクについて詳細なヘルプ情報を取得する

gradle -q help --task libs の出力

> gradle -q help --task libs
Detailed task information for libs

Paths
     :api:libs
     :webapp:libs

Type
     Task (org.gradle.api.Task)

Description
     Builds the JAR

This information includes the full task path, the task type, possible commandline options and the description of the given task.

上記の通り、表示される情報にはタスクのフルパス、使用可能なコマンドラインオプション、またタスクの説明が含まれています。

11.6.4. プロジェクトの依存関係一覧Listing project dependencies

Running gradle dependencies gives you a list of the dependencies of the selected project, broken down by configuration. For each configuration, the direct and transitive dependencies of that configuration are shown in a tree. Below is an example of this report:

gradle dependenciesはプロジェクトの依存関係をコンフィギュレーションごとに一覧表示します。プロジェクトに直接設定されている依存関係と推移的依存関係が、コンフィギュレーション別のツリー構造で表示されます。

例11.13 依存関係の情報を取得する

gradle -q dependencies api:dependencies webapp:dependencies の出力

> gradle -q dependencies api:dependencies webapp:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------

No configurations

------------------------------------------------------------
Project :api - The shared API for the application
------------------------------------------------------------

compile
\--- org.codehaus.groovy:groovy-all:2.3.6

testCompile
\--- junit:junit:4.11
     \--- org.hamcrest:hamcrest-core:1.3

------------------------------------------------------------
Project :webapp - The Web application implementation
------------------------------------------------------------

compile
+--- project :api
|    \--- org.codehaus.groovy:groovy-all:2.3.6
\--- commons-io:commons-io:1.2

testCompile
No dependencies

Since a dependency report can get large, it can be useful to restrict the report to a particular configuration. This is achieved with the optional --configuration parameter:

依存関係のレポートは巨大になることもあるので、レポート内容を特定のコンフィギュレーションのみに限定できれば便利です。 これは、オプションの--configurationを指定することで実現できます。

例11.14 依存関係のレポートをコンフィギュレーションでフィルタする

gradle -q api:dependencies --configuration testCompile の出力

> gradle -q api:dependencies --configuration testCompile
------------------------------------------------------------
Project :api - The shared API for the application
------------------------------------------------------------

testCompile
\--- junit:junit:4.11
     \--- org.hamcrest:hamcrest-core:1.3

11.6.5. 個別の依存関係に対する解析情報を取得する Getting the insight into a particular dependency

Running gradle dependencyInsight gives you an insight into a particular dependency (or dependencies) that match specified input. Below is an example of this report:

gradle dependencyInsightを実行すると、個別の、または複数の依存関係を指定して、それぞれに対する解析情報を取得することができます。以下がそのレポートの例です。

例11.15 個別の依存関係に対する解析情報を取得する

gradle -q webapp:dependencyInsight --dependency groovy --configuration compile の出力

> gradle -q webapp:dependencyInsight --dependency groovy --configuration compile
org.codehaus.groovy:groovy-all:2.3.6
\--- project :api
     \--- compile

This task is extremely useful for investigating the dependency resolution, finding out where certain dependencies are coming from and why certain versions are selected. For more information please see the DependencyInsightReportTask class in the API documentation.

dependencyInsightは、依存関係がどのように解決されているか調査するときにとても便利なタスクです。ある依存関係がどこから来て、なぜそのバージョンが選択されているのか調べることができます。 詳細については、DependencyInsightReportTaskを参照してください。

The built-in dependencyInsight task is a part of the 'Help' tasks group. The task needs to configured with the dependency and the configuration. The report looks for the dependencies that match the specified dependency spec in the specified configuration. If Java related plugin is applied, the dependencyInsight task is pre-configured with 'compile' configuration because typically it's the compile dependencies we are interested in. You should specify the dependency you are interested in via the command line '--dependency' option. If you don't like the defaults you may select the configuration via '--configuration' option. For more information see the DependencyInsightReportTask class in the API documentation.

組み込みのdependencyInsightタスクは、Helpグループに属しています。 このタスクは、依存関係およびコンフィグレーションを指定しないと使用できません。 レポートが出力される際は、指定されたコンフィグレーションの指定された依存関係を探しに行きます。 Java関連のプラグインが適用されていれば、dependencyInsightタスクは既にcompileコンフィグレーションに対して設定されています。一般的に言って、よく調べたくなる依存関係はこのコンフィグレーションに属しているからです。 また、調査対象の依存関係を「--dependency」オプションで指定しなければなりません。 さらに、デフォルトのコンフィグレーションが気に入らないときは「--configuration」オプションで明示的にコンフィグレーションを指定します。 詳しくはDependencyInsightReportTaskを参照してください。

11.6.6. プロジェクトのプロパティ一覧Listing project properties

Running gradle properties gives you a list of the properties of the selected project. This is a snippet from the output:

gradle propertiesはプロジェクトのプロパティを一覧表示します。出力例の一部を以下に示します。

例11.16 プロパティに関する情報

gradle -q api:properties の出力

> gradle -q api:properties
------------------------------------------------------------
Project :api - The shared API for the application
------------------------------------------------------------

allprojects: [project ':api']
ant: org.gradle.api.internal.project.DefaultAntBuilder@12345
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@12345
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@12345
asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@12345
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@12345
buildDir: /home/user/gradle/samples/userguide/tutorial/projectReports/api/build
buildFile: /home/user/gradle/samples/userguide/tutorial/projectReports/api/build.gradle

11.6.7. ビルドのプロファイリングProfiling a build

The --profile command line option will record some useful timing information while your build is running and write a report to the build/reports/profile directory. The report will be named using the time when the build was run.

コマンドラインオプションで--profileをつけてビルドを実行すると、ビルドに要した時間のうち有用と思われるいくつかの情報を計測して、結果をbuild/reports/profileディレクトリを出力します。レポート名には、ビルドを行った時刻が付加されます。

This report lists summary times and details for both the configuration phase and task execution. The times for configuration and task execution are sorted with the most expensive operations first. The task execution results also indicate if any tasks were skipped (and the reason) or if tasks that were not skipped did no work.

このレポートでは、ビルド時間に関する概要のほか、設定フェーズとタスク実行に要した時間がタスクごとに表示されます。設定フェーズ、タスク実行に関するレポートは必要時間の降順でソートされており、さらにタスク実行については、タスクがスキップされたかどうか、作業が発生したかどうかみることができるようになっています。

Builds which utilize a buildSrc directory will generate a second profile report for buildSrc in the buildSrc/build directory.

なお、buildSrcディレクトリを使っている場合、buildSrc/buildbuildSrcのレポートが別途出力されます。

11.7. 空実行Dry Run

Sometimes you are interested in which tasks are executed in which order for a given set of tasks specified on the command line, but you don't want the tasks to be executed. You can use the -m option for this. For example, if you run “gradle -m clean compile”, you'll see all the tasks that would be executed as part of the clean and compile tasks. This is complementary to the tasks task, which shows you the tasks which are available for execution.

コマンドラインにタスク名を並べて実行したときに、どのタスクがどの順番で実行されるのか知りたくなることがあります。しかしそのために実際にタスクを実行したくはありません。このような場合、-mオプションをつけて実行してください。たとえば、gradle -m clean compileと実行すれば、cleanタスクとcompileタスクの実行にあたって実際に実行されるすべてのタスクが実行順に表示されます。これは、実行可能なタスクの一覧を表示するtasksタスクの補足にもなります。

11.8. まとめSummary

In this chapter, you have seen some of the things you can do with Gradle from the command-line. You can find out more about the gradle command in 付録D Gradle コマンドラインGradle Command Line.

この章では、コマンドラインで使えるGradleの機能をいくつか見てきました。gradleコマンドについては付録D Gradle コマンドラインGradle Command Lineにも記載してあります。