第23章 Javaプラグイン

The Java plugin adds Java compilation along with testing and bundling capabilities to a project. It serves as the basis for many of the other Gradle plugins.

Javaプラグインは、プロジェクトにJavaのコンパイル、テスト、そしてビルド能力を与えます。このプラグインは、他の多くのGradleプラグインの基礎となっています。

23.1. 使用方法Usage

To use the Java plugin, include the following in your build script:

Javaプラグインを使うためには、ビルドスクリプトに下記を含めます:

例23.1 Javaプラグインの使用

build.gradle

apply plugin: 'java'

23.2. ソースセットSource sets

The Java plugin introduces the concept of a source set. A source set is simply a group of source files which are compiled and executed together. These source files may include Java source files and resource files. Other plugins add the ability to include Groovy and Scala source files in a source set. A source set has an associated compile classpath, and runtime classpath.

Javaプラグインはソースセットの概念を導入します。ソースセットは、一緒にコンパイルされ実行されるソースファイルのグループです。このソースファイルには、Javaソースファイルとリソースファイルを含むことができます。他のプラグインは、ソースセットにGroovyやScalaのソースファイルを含めることを可能にします。ソースセットは、それぞれに関連づけられたコンパイル時クラスパスと実行時クラスパスを持ちます。

One use for source sets is to group source files into logical groups which describe their purpose. For example, you might use a source set to define an integration test suite, or you might use separate source sets to define the API and implementation classes of your project.

ソースセットを使うと、ソースファイルを論理的なグループに分割し、それぞれ別個の目的を持たせることもできます。例えば、統合テストスイートやプロジェクトのAPIクラスを定義したり、異なるJavaバージョンでコンパイルする必要があるソースを分離することなどに使うことができます。

The Java plugin defines two standard source sets, called main and test. The main source set contains your production source code, which is compiled and assembled into a JAR file. The test source set contains your test source code, which is compiled and executed using JUnit or TestNG. These can be unit tests, integration tests, acceptance tests, or any combination that is useful to you.

Javaプラグインは、maintestという二つの標準ソースセットを定義します。mainソースセットは、コンパイルされJARファイルを構成する製品ソースコードを含みます。testソースセットは、コンパイルされJUnitやTestNGで実行されるユニットテストコードを含みます。

23.3. タスクTasks

The Java plugin adds a number of tasks to your project, as shown below.

Javaプラグインは、以下に示すような数多くのタスクをプロジェクトに追加します。

表23.1 Javaプラグイン - タスクJava plugin - tasks

タスク名Task name 依存先Depends on Type 説明Description
compileJava コンパイル時クラスパスを作り出すすべてのタスク。 compileコンフィギュレーションに含まれる、 プロジェクトの依存関係のためのjarタスクを含む All tasks which produce the compile classpath. This includes the jar task for project dependencies included in the compile configuration. JavaCompile javacを使って製品Javaソースファイルをコンパイルする Compiles production Java source files using javac.
processResources - Copy 製品リソースを製品クラスディレクトリにコピーする Copies production resources into the production classes directory.
classes compileJavaprocessResources。 一部のプラグインはさらにコンパイルタスクを追加する The compileJava task and the processResources task. Some plugins add additional compilation tasks. Task 製品クラスディレクトリを構築する Assembles the production classes directory.
compileTestJava compile、そしてテストのコンパイル時クラスパスを作り出すすべてのタスク compile, plus all tasks which produce the test compile classpath. JavaCompile javacを使ってテストJavaソースファイルをコンパイルする Compiles test Java source files using javac.
processTestResources - Copy テストリソースをテストクラスディレクトリにコピーする Copies test resources into the test classes directory.
testClasses compileTestJavaprocessTestResources。一部のプラグインはさらにテストコンパイルタスクを追加する compileTestJava task and processTestResources task. Some plugins add additional test compilation tasks. Task テストクラスディレクトリを構築する Assembles the test classes directory.
jar compile Jar JARファイルを構築する Assembles the JAR file
javadoc compile Javadoc Javadocを使って製品JavaソースのAPIドキュメントを生成する Generates API documentation for the production Java source, using Javadoc
test compilecompileTest、そしてテストの実行時クラスパスを作り出すすべてのタスク compile, compileTest, plus all tasks which produce the test runtime classpath. Test JUnitかTestNGを使ってユニットテストを実行する Runs the unit tests using JUnit or TestNG.
uploadArchives archivesコンフィギュレーションのアーティファクトを生成するタスク ( jarを含む) The tasks which produce the artifacts in the archives configuration, including jar. Upload archives コンフィギュレーションのアーティファクト(JARファイルを含む)をアップロードする Uploads artifacts in the archives configuration, including the JAR file.
clean - Delete プロジェクトのビルドディレクトリを削除するDeletes the project build directory.
cleanTaskName - Delete 指定したタスクが生成したファイルを削除する。 例えばcleanJarjarタスクが作ったJARファイルを削除し、cleanTesttestタスクが作ったテスト結果を削除する。 Deletes files created by specified task. cleanJar will delete the JAR file created by the jar task, and cleanTest will delete the test results created by the test task.

For each source set you add to the project, the Java plugin adds the following compilation tasks:

Javaプラグインは、プロジェクトに追加されるソースセットの各々について以下のコンパイルタスクを追加します:

表23.2 Javaプラグイン - ソースセットタスクJava plugin - source set tasks

タスク名Task name 依存先Depends on Type 説明Description
compileSourceSetJava このソースセットのコンパイル時クラスパスを作り出すすべてのタスク All tasks which produce the source set's compile classpath. JavaCompile javacを使って特定のソースセットのJavaソースファイルをコンパイルする Compiles the given source set's Java source files using javac.
processSourceSetResources - Copy 特定のソースセットのリソースをそのクラスディレクトリにコピーする Copies the given source set's resources into the classes directory.
sourceSetClasses compileSourceSetJavaprocessSourceSetResources。一部のプラグインはさらにこのソースセットのコンパイルタスクを追加する The compileSourceSetJava task and the processSourceSetResources task. Some plugins add additional compilation tasks for the source set. Task 特定のソースセットのクラスディレクトリを構築する Assembles the given source set's classes directory.

The Java plugin also adds a number of tasks which form a lifecycle for the project:

Javaプラグインは、プロジェクトのライフサイクルを構成する数多くのタスクも追加します:

表23.3 Javaプラグイン - ライフサイクルタスクJava plugin - lifecycle tasks

タスク名Task name 依存先Depends on Type 説明Description
assemble jarを含む、プロジェクトのすべてのアーカイブタスク。 一部のプラグインはプロジェクトにさらにアーカイブタスクを追加する All archive tasks in the project, including jar. Some plugins add additional archive tasks to the project. Task プロジェクトのすべてのアーカイブを構築する Assembles all the archives in the project.
check testを含む、プロジェクトのすべての検証タスク。 一部のプラグインはプロジェクトにさらに検証タスクを追加する All verification tasks in the project, including test. Some plugins add additional verification tasks to the project. Task プロジェクトのすべての検証タスクを実行する Performs all verification tasks in the project.
build checkassemble check and assemble Task プロジェクトのフルビルドを実行する Performs a full build of the project.
buildNeeded build と、testRuntimeコンフィギュレーションのプロジェクトライブラリ依存先すべての buildNeededタスク build and buildNeeded tasks in all project lib dependencies of the testRuntime configuration. Task このプロジェクトと、このプロジェクトが依存しているすべてのプロジェクトのフルビルドを実行する。 Performs a full build of the project and all projects it depends on.
buildDependents build と、testRuntimeコンフィギュレーションのプロジェクトライブラリ依存先がこのプロジェクトであるすべてのプロジェクトの buildDependentsタスク build and buildDependents tasks in all projects with a project lib dependency on this project in a testRuntime configuration. Task このプロジェクトと、このプロジェクトに依存しているすべてのプロジェクトのフルビルドを実行する。 Performs a full build of the project and all projects which depend on it.
buildConfigName ConfigNameコンフィギュレーションのアーティファクトを作り出すタスク The tasks which produce the artifacts in configuration ConfigName. Task 指定されたコンフィギュレーションのアーティファクトを構築する。 このタスクは、Javaプラグインが暗黙的に適用するBaseプラグインにより追加される。 Assembles the artifacts in the specified configuration. The task is added by the Base plugin which is implicitly applied by the Java plugin.
uploadConfigName ConfigNameコンフィギュレーションのアーティファクトをアップロードするタスク The tasks which uploads the artifacts in configuration ConfigName. Upload 指定されたコンフィギュレーションのアーティファクトを構築しアップロードする。 このタスクは、Javaプラグインが暗黙的に適用するBaseプラグインにより追加される。 Assembles and uploads the artifacts in the specified configuration. The task is added by the Base plugin which is implicitly applied by the Java plugin.

The following diagram shows the relationships between these tasks.

下の図は、上記のタスク間の関係を示しています。

図23.1 Javaプラグイン - タスクJava plugin - tasks

Javaプラグイン - タスクJava plugin - tasks

23.4. プロジェクトレイアウトProject layout

The Java plugin assumes the project layout shown below. None of these directories need exist or have anything in them. The Java plugin will compile whatever it finds, and handles anything which is missing.

Javaプラグインは、以下のようなプロジェクトレイアウトを仮定しています。これらのディレクトリは、存在しなかったり中身が空でもかまいません。Javaプラグインは、見つけたものをコンパイルし、見つからないものには適切に対処します。

表23.4 Javaプラグイン - デフォルトプロジェクトレイアウトJava plugin - default project layout

ディレクトリDirectory 意味Meaning
src/main/java 製品のJavaソースProduction Java source
src/main/resources 製品のリソースProduction resources
src/test/java テストのJavaソースTest Java source
src/test/resources テストのリソースTest resources
src/sourceSet/java 特定のソースセットのJavaソースJava source for the given source set
src/sourceSet/resources 特定のソースセットのリソースResources for the given source set

23.4.1. プロジェクトレイアウトの変更Changing the project layout

You configure the project layout by configuring the appropriate source set. This is discussed in more detail in the following sections. Here is a brief example which changes the main Java and resource source directories.

プロジェクトのレイアウトは、適切なソースセットを設定することでカスタマイズできます。これについては後続の節でより詳しく説明します。以下に、mainのJavaソースとリソースのソースディレクトリを変更する簡単な例を示します。

例23.2 Javaソースレイアウトのカスタマイズ

build.gradle

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

23.5. 依存関係の管理Dependency management

The Java plugin adds a number of dependency configurations to your project, as shown below. It assigns those configurations to tasks such as compileJava and test.

Javaプラグインは、以下のような多くの依存関係のコンフィギュレーションをプロジェクトに追加します。 これらのコンフィギュレーションはcompileJavatestといったタスクに割り当てられます。

表23.5 Javaプラグイン - 依存関係のコンフィギュレーションJava plugin - dependency configurations

名前Name 拡張元Extends 利用するタスクUsed by tasks 意味Meaning
compile - compileJava コンパイル時の依存関係 Compile time dependencies
runtime compile - 実行時の依存関係 Runtime dependencies
testCompile compile compileTestJava テストのコンパイル時の追加依存関係 Additional dependencies for compiling tests.
testRuntime runtime, testCompile test テストの実行時の追加依存関係 Additional dependencies for running tests only.
archives - uploadArchives このプロジェクトが生成するアーティファクト(jarファイルなど) Artifacts (e.g. jars) produced by this project.
default runtime - このプロジェクトに依存するプロジェクトが使用する、デフォルトのコンフィグレーション。アーティファクトと、このプロジェクトが実行時に要求する依存関係が含まれる。 The default configuration used by a project dependency on this project. Contains the artifacts and dependencies required by this project at runtime.

図23.2 Javaプラグイン - 依存関係のコンフィギュレーションJava plugin - dependency configurations

Javaプラグイン - 依存関係のコンフィギュレーションJava plugin - dependency configurations

For each source set you add to the project, the Java plugins adds the following dependency configurations:

プロジェクトに追加されたそれぞれのソースセットに対し、Javaプラグインは次の依存関係コンフィグレーションを追加します。

表23.6 Javaプラグイン - ソースセットの依存関係コンフィグレーションJava plugin - source set dependency configurations

名前Name 拡張元Extends 利用するタスクUsed by tasks 意味Meaning
sourceSetCompile - compileSourceSetJava 対象ソースセットのコンパイル時依存関係Compile time dependencies for the given source set
sourceSetRuntime sourceSetCompile - 対象ソースセットの実行時依存関係Runtime time dependencies for the given source set

23.6. 規約プロパティConvention properties

The Java plugin adds a number of convention properties to the project, shown below. You can use these properties in your build script as though they were properties of the project object (see 「規約 Conventions).

Javaプラグインは、以下のような多くの規約プロパティをプロジェクトに追加します。 これらは、ビルドスクリプトの中で、あたかもprojectオブジェクトのプロパティであるかのように使うことができます (「規約 Conventions参照)。

表23.7 Javaプラグイン - ディレクトリプロパティJava plugin - directory properties

プロパティ名Property name Type デフォルト値Default value 説明Description
reportsDirName String reports レポートを生成するディレクトリ名。ビルドディレクトリへの相対パス The name of the directory to generate reports into, relative to the build directory.
reportsDir File (read-only) buildDir/reportsDirName レポートを生成するディレクトリ The directory to generate reports into.
testResultsDirName String test-results テスト結果の.xmlファイルを生成するディレクトリ名。ビルドディレクトリへの相対パス The name of the directory to generate test result .xml files into, relative to the build directory.
testResultsDir File (read-only) buildDir/testResultsDirName テスト結果の.xmlファイルを生成するディレクトリThe directory to generate test result .xml files into.
testReportDirName String tests テストレポートを生成するディレクトリ名。レポートディレクトリへの相対パス The name of the directory to generate the test report into, relative to the reports directory.
testReportDir File (read-only) reportsDir/testReportDirName テストレポートを生成するディレクトリ The directory to generate the test report into.
libsDirName String libs ライブラリを生成するディレクトリ名。ビルドディレクトリへの相対パス The name of the directory to generate libraries into, relative to the build directory.
libsDir File (read-only) buildDir/libsDirName ライブラリを生成するディレクトリ The directory to generate libraries into.
distsDirName String distributions ディストリビューションを生成するディレクトリ名。ビルドディレクトリへの相対パス The name of the directory to generate distributions into, relative to the build directory.
distsDir File (read-only) buildDir/distsDirName ディストリビューションを生成するディレクトリ The directory to generate distributions into.
docsDirName String docs ドキュメントを生成するディレクトリ名。ビルドディレクトリへの相対パス The name of the directory to generate documentation into, relative to the build directory.
docsDir File (read-only) buildDir/docsDirName ドキュメントを生成するディレクトリ The directory to generate documentation into.
dependencyCacheDirName String dependency-cache ソースの依存関係情報をキャッシュするのに使用するディレクトリ名。ビルドディレクトリへの相対パス The name of the directory to use to cache source dependency information, relative to the build directory.
dependencyCacheDir File (read-only) buildDir/dependencyCacheDirName ソースの依存関係情報をキャッシュするのに使用するディレクトリ The directory to use to cache source dependency information.

表23.8 Javaプラグイン - その他のプロパティJava plugin - other properties

プロパティ名Property name Type デフォルト値Default value 説明Description
sourceSets SourceSetContainer (read-only) 非nullNot null プロジェクトのソースセット Contains the project's source sets.
sourceCompatibility JavaVersion。 StringやNumberで設定することも可能。例: '1.5'1.5 JavaVersion. Can also set using a String or a Number, e.g. '1.5' or 1.5. Value of the current used JVM Javaソースのコンパイル時に使用するJavaバージョン互換性 Java version compatibility to use when compiling Java source.
targetCompatibility JavaVersion。 StringやNumberで設定することも可能。例: '1.5'1.5 JavaVersion. Can also set using a String or Number, e.g. '1.5' or 1.5. sourceCompatibility クラス生成のターゲットJavaバージョン Java version to generate classes for.
archivesBaseName String projectName JARやZIPファイルのようなアーカイブに使用するベース名 The basename to use for archives, such as JAR or ZIP files.
manifest Manifest 空のマニフェストan empty manifest すべてのJARファイルを含むマニフェスト The manifest to include in all JAR files.

These properties are provided by convention objects of type JavaPluginConvention, and BasePluginConvention.

これらのプロパティは、JavaPluginConventionBasePluginConventionなどの型の規約オブジェクトによって提供されます。

23.7. ソースセットの利用Working with source sets

You can access the source sets of a project using the sourceSets property. This is a container for the project's source sets, of type SourceSetContainer. There is also a sourceSets { } script block, which you can pass a closure to configure the source set container. The source set container works pretty much the same way as other containers, such as tasks.

プロジェクトのソースセットには、sourceSetsプロパティを使ってアクセスすることができます。 これはプロジェクトのソースセットのコンテナで、SourceSetContainer型です。 また、sourceSets()というメソッドもあり、クロージャを渡してソースセットコンテナを設定することができます。 ソースセットコンテナは、tasksのような他のコンテナと同じように働きます。

例23.3 ソースセットへのアクセス

build.gradle

// Various ways to access the main source set
println sourceSets.main.output.classesDir
println sourceSets['main'].output.classesDir
sourceSets {
    println main.output.classesDir
}
sourceSets {
    main {
        println output.classesDir
    }
}

// Iterate over the source sets
sourceSets.all {
    println name
}

To configure an existing source set, you simply use one of the above access methods to set the properties of the source set. The properties are described below. Here is an example which configures the main Java and resources directories:

既存のソースセットを設定するには、上記のアクセスメソッドの一つを使って、そのソースセットのプロパティを設定します。 プロパティについては後述します。以下に、mainのJavaソースとリソースディレクトリを設定する例を示します:

例23.4 ソースセットのソースディレクトリの設定

build.gradle

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}

23.7.1. ソースセットプロパティSource set properties

The following table lists some of the important properties of a source set. You can find more details in the API documentation for SourceSet.

以下の表は、ソースセットの重要なプロパティの一覧です。 さらに詳しくは、SourceSetのAPIドキュメントをご覧ください。

表23.9 Javaプラグイン - ソースセットプロパティJava plugin - source set properties

プロパティ名Property name Type デフォルト値Default value 説明Description
name String (read-only) 非nullNot null このソースセットを識別するための名前 The name of the source set, used to identify it.
output SourceSetOutput (read-only) Not null このソースセットに対する出力ファイル。コンパイルされたクラスファイルやリソースを含む。 The output files of the source set, containing its compiled classes and resources.
output.classesDir File buildDir/classes/name このソースセットのクラスを生成するディレクトリ The directory to generate the classes of this source set into.
output.resourcesDir File buildDir/resources/name このソースセットのリソースを生成するディレクトリ The directory to generate the resources of this source set into.
compileClasspath FileCollection compileSourceSetコンフィグレーション compileSourceSet configuration. このソースセットのソースファイルのコンパイル時クラスパス The classpath to use when compiling the source files of this source set.
runtimeClasspath FileCollection output + runtimeSourceSetコンフィグレーション output + runtimeSourceSet configuration. このソースセットのクラスの実行時クラスパス The classpath to use when executing the classes of this source set.
java SourceDirectorySet (read-only) 非nullNot null このソースセットのJavaソースファイル。 Javaソースディレクトリ内の.javaファイルのみを含み、その他のファイルは含まない The Java source files of this source set. Contains only .java files found in the Java source directories, and excludes all other files.
java.srcDirs Set<File>。 設定には「入力ファイルセットを指定する Specifying a set of input filesで述べる方法ならどれでも使用可 Set<File>. Can set using anything described in 「入力ファイルセットを指定する Specifying a set of input files. [projectDir/src/name/java] このソースセットのJavaソースファイルを含むソースディレクトリ The source directories containing the Java source files of this source set.
resources SourceDirectorySet (read-only) 非nullNot null このソースセットのリソース。 リソースのみを含み、リソースソースディレクトリ内の.javaファイルは含まない。 Groovyプラグインのような他のプラグインでは、このコレクションから除外されるタイプがさらに追加される。 The resources of this source set. Contains only resources, and excludes any .java files found in the resource source directories. Other plugins, such as the Groovy plugin, exclude additional types of files from this collection.
resources.srcDirs Set<File>。 設定には「入力ファイルセットを指定する Specifying a set of input filesで述べる方法ならどれでも使用可Set<File>. Can set using anything described in 「入力ファイルセットを指定する Specifying a set of input files. [projectDir/src/name/resources] このソースセットのリソースを含むソースディレクトリ The source directories containing the resources of this source set.
allJava SourceDirectorySet (read-only) java このソースセットのすべての.javaファイル。 Groovyプラグインのような一部のプラグインでは、さらに追加のJavaソースファイルがこのコレクションに追加される。 All .java files of this source set. Some plugins, such as the Groovy plugin, add additional Java source files to this collection.
allSource SourceDirectorySet (read-only) resources + java このソースセットのすべてのソースファイル。 すべてのリソースファイルとJavaソースファイルが含まれる。 Groovyプラグインのような一部のプラグインでは、さらに追加のソースファイルがこのコレクションに追加される。 All source files of this source set. This include all resource files and all Java source files. Some plugins, such as the Groovy plugin, add additional source files to this collection.

23.7.2. 新しいソースセットの定義Defining new source sets

To define a new source set, you simply reference it in the sourceSets { } block. Here's an example:

新しいソースセットは、sourceSets { }ブロックの中でそれを参照するだけで定義できます。以下がその例です。:

例23.5 ソースセットの定義

build.gradle

sourceSets {
    intTest
}

When you define a new source set, the Java plugin adds some dependency configurations for the source set, as shown in 表23.6「Javaプラグイン - ソースセットの依存関係コンフィグレーションJava plugin - source set dependency configurations. You can use these configurations to define the compile and runtime dependencies of the source set.

ソースセットを定義すると、Javaプラグインは、そのソースセットのために表23.6「Javaプラグイン - ソースセットの依存関係コンフィグレーションJava plugin - source set dependency configurationsで示した依存関係のコンフィグレーションを追加します。これらのコンフィグレーションを、そのソースセットのコンパイル時や実行時の依存関係を定義するために使うことができます。

例23.6 ソースセットの依存関係定義

build.gradle

sourceSets {
    intTest
}

dependencies {
    intTestCompile 'junit:junit:4.11'
    intTestRuntime 'org.ow2.asm:asm-all:4.0'
}

The Java plugin also adds a number of tasks which assemble the classes for the source set, as shown in 表23.2「Javaプラグイン - ソースセットタスクJava plugin - source set tasks. For example, for a source set called intTest, compiling the classes for this source set is done by running gradle intTestClasses.

また、Javaプラグインは、表23.2「Javaプラグイン - ソースセットタスクJava plugin - source set tasksに示したような、 そのソースセットのクラスを構築するためのタスクを追加します。 例えば、intTestというソースセットを追加すると、gradle intTestClassesと実行することでそのソースセットのクラスをコンパイルできるようになります。

例23.7 ソースセットのコンパイル

gradle intTestClasses の出力

> gradle intTestClasses
:compileIntTestJava
:processIntTestResources
:intTestClasses

BUILD SUCCESSFUL

Total time: 1 secs

23.7.3. ソースセットの実例Some source set examples

Adding a JAR containing the classes of a source set:

ソースセットのクラスを含んだJARを追加します:

例23.8 ソースセットのJARを生成

build.gradle

task intTestJar(type: Jar) {
    from sourceSets.intTest.output
}

Generating Javadoc for a source set:

ソースセットのJavadocを生成します:

例23.9 ソースセットのJavadocを生成

build.gradle

task intTestJavadoc(type: Javadoc) {
    source sourceSets.intTest.allJava
}

Adding a test suite to run the tests in a source set:

ソースセットに含まれるテストを実行するテストスイートを追加します:

例23.10 ソースセットのテストを実行

build.gradle

task intTest(type: Test) {
    testClassesDir = sourceSets.intTest.output.classesDir
    classpath = sourceSets.intTest.runtimeClasspath
}

23.8. JavadocJavadoc

The javadoc task is an instance of Javadoc. It supports the core Javadoc options and the options of the standard doclet described in the reference documentation of the Javadoc executable. For a complete list of supported Javadoc options consult the API documentation of the following classes: CoreJavadocOptions and StandardJavadocDocletOptions.

javadocタスクはJavadocのインスタンスです。 javadocの主なオプションと、javadocコマンドのリファレンスガイドに記載されている標準docletのオプションをサポートしています。 サポートしているjavadocオプションの完全なリストについては、次のクラスのAPIドキュメントを参照してください: CoreJavadocOptionsおよびStandardJavadocDocletOptions

表23.10 Javaプラグイン - JavadocプロパティJava plugin - Javadoc properties

プロパティ名Property name Type デフォルト値Default value
classpath FileCollection sourceSets.main.output + sourceSets.main.compileClasspath
source FileTree。 設定には「入力ファイルセットを指定する Specifying a set of input filesで述べる方法ならどれでも使用可 FileTree. Can set using anything described in 「入力ファイルセットを指定する Specifying a set of input files. sourceSets.main.allJava
destinationDir File docsDir/javadoc
title String プロジェクトの名前とバージョン The name and version of the project

23.9. CleanClean

The clean task is an instance of Delete. It simply removes the directory denoted by its dir property.

cleanタスクはDeleteのインスタンスです。 dirプロパティで示されるディレクトリを削除します。

表23.11 Javaプラグイン - CleanプロパティJava plugin - Clean properties

タスクプロパティProperty name Type デフォルト値Default value
dir File buildDir

23.10. リソースResources

The Java plugin uses the Copy task for resource handling. It adds an instance for each source set in the project. You can find out more about the copy task in 「ファイルをコピーする Copying files.

Javaプラグインは、リソースの処理にCopyタスクを使います。 プロジェクトの各ソースセットに対して一つのインスタンスを追加します。 copyタスクの詳細については、「ファイルをコピーする Copying filesをご覧ください。

表23.12 Javaプラグイン- processResourcesプロパティJava plugin - ProcessResources properties

タスクプロパティProperty name Type デフォルト値Default value
srcDirs Object。 設定には「入力ファイルセットを指定する Specifying a set of input filesで述べる方法ならどれでも使用可 Object. Can set using anything described in 「入力ファイルセットを指定する Specifying a set of input files. sourceSet.resources
destinationDir File。 設定には「ファイルを参照する Locating filesで述べる方法ならどれでも使用可 File. Can set using anything described in 「ファイルを参照する Locating files. sourceSet.output.resourcesDir

23.11. CompileJavaCompileJava

The Java plugin adds a JavaCompile instance for each source set in the project. Some of the most common configuration options are shown below.

Javaプラグインは、プロジェクトの各ソースセットに対して一つのJavaCompileインスタンスを追加します。 compileタスクは、実際のコンパイル作業をAntのjavacタスクに委譲します。 Antのjavacタスクの大部分のプロパティが設定可能です。

表23.13 Javaプラグイン - CompileプロパティJava plugin - Compile properties

タスクプロパティProperty name Type デフォルト値Default value
classpath FileCollection sourceSet.compileClasspath
source FileTree。 設定には「入力ファイルセットを指定する Specifying a set of input filesで述べる方法ならどれでも使用可 FileTree. Can set using anything described in 「入力ファイルセットを指定する Specifying a set of input files. sourceSet.java
destinationDir File. sourceSet.output.classesDir

By default, the Java compiler runs in the Gradle process. Setting options.fork to true causes compilation to occur in a separate process. In the case of the Ant javac task, this means that a new process will be forked for each compile task, which can slow down compilation. Conversely, Gradle's direct compiler integration (see above) will reuse the same compiler process as much as possible. In both cases, all fork options specified with options.forkOptions will be honored.

デフォルトでは、javaコンパイラはGradleプロセス上で実行されます。設定を options.forktrueにすると、 個別のプロセスでコンパイルを実行します。 Antのjavacタスクを例に挙げると, コンパイルタスクを実行するたびに新しいプロセスが実行される形で 遅延実行させることも可能です。反対に、Gradleのダイレクトコンパイラの利用を有効にした場合 (上記参照) 出来るだけ 同一のプロセスでコンパイルを実行しようとします. 両方利用するケースの場合は、全ての処理実行オプションは options.forkOptions によって指定されるでしょう。

23.12. Incremental Java compilation

Starting with Gradle 2.1, it is possible to compile Java incrementally. This feature is still incubating. See the JavaCompile task for information on how to enable it.

Main goals for incremental compilations are:

  • Avoid wasting time compiling source classes that don't have to be compiled. This means faster builds, especially when a change to a source class or a jar does not incur recompilation of many source classes that depend on the changed input.
  • Change as few output classes as possible. Classes that don't need to be recompiled remain unchanged in the output directory. An example scenario when this is really useful is using JRebel - the fewer output classes are changed the quicker the jvm can use refreshed classes.

The incremental compilation at a high level:

  • The detection of the correct set of stale classes is reliable at some expense of speed. The algorithm uses bytecode analysis and deals gracefully with compiler optimizations (inlining of non-private constants), transitive class dependencies, etc. Example: When a class with a public constant changes, we eagerly compile everything to avoid problems with constants inlined by the compiler. Down the road we will tune the algorithm and caching so that incremental Java compilation can be a default setting for every compile task.
  • To make incremental compilation fast, we cache class analysis results and jar snapshots. The initial incremental compilation can be slower due to the cold caches.

23.13. テストTest

The test task is an instance of Test. It automatically detects and executes all unit tests in the test source set. It also generates a report once test execution is complete. JUnit and TestNG are both supported. Have a look at Test for the complete API.

testタスクはTestのインスタンスです。 このタスクは、testソースセットに含まれるすべてのユニットテストを自動的に検出し、実行します。 また、テストの実行が完了するとレポートを生成します。JUnitとTestNGの両方がサポートされています。 完全なAPIについては、Testを見てください。

23.13.1. テストの実行 Test execution

Tests are executed in a separate JVM, isolated from the main build process. The Test task's API allows you some control over how this happens.

テストの実行は別のJVMで行われ、メインのビルドプロセスからは分離されます。TestタスクのAPIを使って、テストの実行を制御できます。

There are a number of properties which control how the test process is launched. This includes things such as system properties, JVM arguments, and the Java executable to use.

テストプロセスの起動を制御するための多くのプロパティが用意されています。 これにはシステムプロパティや、JVMへの引数、Java実行コマンドなどが含まれます。

You can specify whether or not to execute your tests in parallel. Gradle provides parallel test execution by running multiple test processes concurrently. Each test process executes only a single test at a time, so you generally don't need to do anything special to your tests to take advantage of this. The maxParallelForks property specifies the maximum number of test processes to run at any given time. The default is 1, that is, do not execute the tests in parallel.

テストが並列に実行されるかどうかを指定することができます。 Gradleでは、複数のテストプロセスを同時に実行する並列テスト実行が可能です。 各テストプロセスは一度に一つのテストだけを実行するので、通常、これを活用するために何か特別な準備をする必要はありません。 maxParallelForksプロパティで、同時に実行されるテストプロセスの最大個数を指定します。 デフォルトは1で、これはテストが並列実行されないということです。

The test process sets the org.gradle.test.worker system property to a unique identifier for that test process, which you can use, for example, in files names or other resource identifiers.

テストプロセスでは、そのテストプロセスの一意な識別子であるorg.gradle.test.workerシステムプロパティが設定されます。 これは例えばファイル名の一部や、その他のリソースの識別子などに利用することができます。

You can specify that test processes should be restarted after it has executed a certain number of test classes. This can be a useful alternative to giving your test process a very large heap. The forkEvery property specifies the maximum number of test classes to execute in a test process. The default is to execute an unlimited number of tests in each test process.

一定のテストクラスを実行し終わったら、そのテストプロセスが再起動されるように指定することができます。 これは、テストプロセスに巨大なヒープを割り当てることに対する便利な代替手段になりえます。 forkEveryプロパティは、一つのテストプロセス内で実行されるテストクラスの最大数を指定します。 デフォルトでは各テストプロセスで無制限な数のテストを実行できます。

The task has an ignoreFailures property to control the behavior when tests fail. The Test task always executes every test that it detects. It stops the build afterwards if ignoreFailures is false and there are failing tests. The default value of ignoreFailures is false.

このタスクは、テストが失敗したときの振る舞いを制御するignoreFailuresプロパティを持っています。 Testはいつも見つけたテストをすべて実行します。 ignoreFailuresがfalseのとき、失敗したテストがあるとそれ以降のビルドは停止されます。 ignoreFailuresのデフォルト値はfalseです。

The testLogging property allows you to configure which test events are going to be logged and at which detail level. By default, a concise message will be logged for every failed test. See TestLoggingContainer for how to tune test logging to your preferences.

testLoggingプロパティで、どのテストイベントを、どのログレベルでログに出すべきか設定することができます。 デフォルトでは、全ての失敗したテストに対して簡潔なメッセージがログ出力されます。好みに応じてテストログを設定する方法については、TestLoggingContainerを参照してください。

23.13.2. Debugging

The test task provides a Test.getDebug() property that can be set to launch to make the JVM wait for a debugger to attach to port 5005 before proceeding with test execution.

This can also be enabled at invocation time via the --debug-jvm task option (since Gradle 1.12).

23.13.3. Test filtering

Starting with Gradle 1.10, it is possible to include only specific tests, based on the test name pattern. Filtering is a different mechanism than test class inclusion / exclusion that will be described in the next few paragraphs (-Dtest.single, test.include and friends). The latter is based on files, e.g. the physical location of the test implementation class. File-level test selection does not support many interesting scenarios that are possible with test-level filtering. Some of them Gradle handles now and some will be satisfied in future releases:

  • Filtering at the level of specific test methods; executing a single test method
  • Filtering based on custom annotations (future)
  • Filtering based on test hierarchy; executing all tests that extend ceratain base class (future)
  • Filtering based on some custom runtime rule, e.g. particular value of a system property or some static state (future)

Test filtering feature has following characteristic:

  • Fully qualified class name or fully qualified method name is supported, e.g. “org.gradle.SomeTest”, “org.gradle.SomeTest.someMethod”
  • Wildcard '*' is supported for matching any characters
  • Command line option “--tests” is provided to conveniently set the test filter. Especially useful for the classic 'single test method execution' use case. When the command line option is used, the inclusion filters declared in the build script are ignored.
  • Gradle tries to filter the tests given the limitations of the test framework API. Some advanced, synthetic tests may not be fully compatible with filtering. However, the vast majority of tests and use cases should be handled neatly.
  • Test filtering supersedes the file-based test selection. The latter may be completely replaced in future. We will grow the the test filtering api and add more kinds of filters.

例23.11 Filtering tests in the build script

build.gradle

test {
    filter {
        //include specific method in any of the tests
        includeTestsMatching "*UiCheck"

        //include all tests from package
        includeTestsMatching "org.gradle.internal.*"

        //include all integration tests
        includeTestsMatching "*IntegTest"
    }
}


For more details and examples please see the TestFilter reference.

Some examples of using the command line option:

  • gradle test --tests org.gradle.SomeTest.someSpecificFeature

  • gradle test --tests *SomeTest.someSpecificFeature

  • gradle test --tests *SomeSpecificTest

  • gradle test --tests all.in.specific.package*

  • gradle test --tests *IntegTest

  • gradle test --tests *IntegTest*ui*

  • gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui

23.13.4. Single test execution via System Properties

This mechanism has been superseded by 'Test Filtering', described above.

Setting a system property of taskName.single = testNamePattern will only execute tests that match the specified testNamePattern. The taskName can be a full multi-project path like “:sub1:sub2:test” or just the task name. The testNamePattern will be used to form an include pattern of “**/testNamePattern*.class”;. If no tests with this pattern can be found an exception is thrown. This is to shield you from false security. If tests of more than one subproject are executed, the pattern is applied to each subproject. An exception is thrown if no tests can be found for a particular subproject. In such a case you can use the path notation of the pattern, so that the pattern is applied only to the test task of a specific subproject. Alternatively you can specify the fully qualified task name to be executed. You can also specify multiple patterns. Examples:

taskName.single = testNamePatternというシステムプロパティを設定すると、指定されたtestNamePatternにマッチするテストだけが実行されます。 taskNameには、":sub1:sub2:test"のような完全なマルチプロジェクトパスか、単なるタスク名が使えます。 testNamePatternは、"**/testNamePattern*.class"という形式のincludesパターンを構成するのに使われます。 このパターンでテストが一つも見つからない場合は例外が発生します。 これは手違いによる偽りの安心を防ぐためです。 複数のサブプロジェクトに対してテストが実行される場合、パターンは各サブプロジェクトに適用されます。 ある一つのサブプロジェクトでテストが見つからなかった場合でも例外が発生します。 このような場合は、パターンのパス記法を使って、パターンが特定のサブプロジェクトのtestタスクだけに適用されるようにできます。 あるいは、完全修飾タスク名を使って実行するタスクを指定することも可能です。 パターンは複数指定することもできます。以下は実例です:

  • gradle -Dtest.single=ThisUniquelyNamedTest test

  • gradle -Dtest.single=a/b/ test

  • gradle -DintegTest.single=*IntegrationTest integTest

  • gradle -Dtest.single=:proj1:test:Customer build

  • gradle -DintegTest.single=c/d/ :proj1:integTest

23.13.5. テストの検出Test detection

The Test task detects which classes are test classes by inspecting the compiled test classes. By default it scans all .class files. You can set custom includes / excludes, only those classes will be scanned. Depending on the test framework used (JUnit / TestNG) the test class detection uses different criteria.

Testタスクは、コンパイル済みのtestクラスを調べて、どのクラスがテストクラスかを見つけだします。 デフォルトでは、すべての.classファイルがスキャンされます。 カスタムの includes / excludes を設定して、特定のクラスだけをスキャンするようにもできます。 テストクラスの検出には、使用するテストフレームワーク(JUnit / TestNG)によって異なる基準が使われます。

When using JUnit, we scan for both JUnit 3 and 4 test classes. If any of the following criteria match, the class is considered to be a JUnit test class:

JUnitを使っている場合は、JUnit 3と4両方のテストクラスをスキャンします。 以下のいずれかの基準に合致する場合、そのクラスはJUnitのテストクラスだと見なされます:

  • Class or a super class extends TestCase or GroovyTestCase

    そのクラスまたはスーパークラスが TestCaseGroovyTestCaseをextendsしている

  • Class or a super class is annotated with @RunWith

    そのクラスまたはスーパークラスに @RunWithアノテーションが付いている

  • Class or a super class contain a method annotated with @Test

    そのクラスまたはスーパークラスが@Testアノテーションが付いたメソッドを含んでいる

When using TestNG, we scan for methods annotated with @Test.

TestNGを使っている場合は、@Testアノテーションが付いたメソッドをスキャンします。

Note that abstract classes are not executed. Gradle also scans up the inheritance tree into jar files on the test classpath.

抽象クラスは実行されないことに注意してください。 Gradleは、testクラスパス上のjarファイルに含まれる継承ツリーもスキャンします。

If you don't want to use test class detection, you can disable it by setting scanForTestClasses to false. This will make the test task only use includes / excludes to find test classes. If scanForTestClasses is false and no include / exclude patterns are specified, the defaults are “**/*Tests.class”, “**/*Test.class” and “**/Abstract*.class” for include and exclude, respectively.

上記のテストクラス検出を使いたくないときは、scanForTestClassesをfalseに設定することで、これを無効にすることができます。 この場合、testタスクがテストクラスを探すときにはincludes / excludesだけが使われます。 scanForTestClassesが無効になっていて、かつincludesやexcludesパターンが指定されていないときは、 デフォルトとしてincludesには"**/*Tests.class", "**/*Test.class"、 そしてexcludesには"**/Abstract*.class"が使われます。

23.13.6. Test grouping

JUnit and TestNG allows sophisticated groupings of test methods.

For grouping JUnit test classes and methods JUnit 4.8 introduces the concept of categories. [16] The test task allows the specification of the JUnit categories you want to include and exclude.

例23.12 JUnit Categories

build.gradle

test {
    useJUnit {
        includeCategories 'org.gradle.junit.CategoryA'
        excludeCategories 'org.gradle.junit.CategoryB'
    }
}

The TestNG framework has a quite similar concept. In TestNG you can specify different test groups. [17] The test groups that should be included or excluded from the test execution can be configured in the test task.

例23.13 Grouping TestNG tests

build.gradle

test {
    useTestNG {
        excludeGroups 'integrationTests'
        includeGroups 'unitTests'
    }
}

23.13.7. Test reporting

The Test task generates the following results by default.

  • An HTML test report.

  • The results in an XML format that is compatible with the Ant JUnit report task. This format is supported by many other tools, such as CI servers.

  • Results in an efficient binary format. The task generates the other results from these binary results.

There is also a stand-alone TestReport task type which can generate the HTML test report from the binary results generated by one or more Test task instances. To use this task type, you need to define a destinationDir and the test results to include in the report. Here is a sample which generates a combined report for the unit tests from subprojects:

例23.14 Creating a unit test report for subprojects

build.gradle

subprojects {
    apply plugin: 'java'

    // Disable the test report for the individual test task
    test {
        reports.html.enabled = false
    }
}

task testReport(type: TestReport) {
    destinationDir = file("$buildDir/reports/allTests")
    // Include the results from the `test` task in all subprojects
    reportOn subprojects*.test
}

You should note that the TestReport type combines the results from multiple test tasks and needs to aggregate the results of individual test classes. This means that if a given test class is executed by multiple test tasks, then the test report will include executions of that class, but it can be hard to distinguish individual executions of that class and their output.

23.13.7.1. TestNG parameterized methods and reporting

TestNG supports parameterizing test methods, allowing a particular test method to be executed multiple times with different inputs. Gradle includes the parameter values in its reporting of the test method execution.

Given a parameterized test method named aTestMethod that takes two parameters, it will be reported with the name: aTestMethod(toStringValueOfParam1, toStringValueOfParam2). This makes identifying the parameter values for a particular iteration easy.

23.13.8. 規約値Convention values

表23.14 Javaプラグイン - テストプロパティJava plugin - test properties

タスクプロパティProperty name Type デフォルト値Default value
testClassesDir File sourceSets.test.output.classesDir
classpath FileCollection sourceSets.test.runtimeClasspath
testResultsDir File testResultsDir
testReportDir File testReportDir
testSrcDirs List<File> sourceSets.test.java.srcDirs

23.14. JarJar

The jar task creates a JAR file containing the class files and resources of the project. The JAR file is declared as an artifact in the archives dependency configuration. This means that the JAR is available in the classpath of a dependent project. If you upload your project into a repository, this JAR is declared as part of the dependency descriptor. You can learn more about how to work with archives in 「アーカイブを作成する Creating archives and artifact configurations in 52章アーティファクトの公開 .

jarタスクは、プロジェクトのクラスファイルとリソースを含んだJARファイルを生成します。このJARファイルはarchivesという依存関係のコンフィギュレーションで、アーティファクトとして宣言されています。 これは、(このプロジェクトに)依存しているプロジェクトのクラスパスでこのJARが利用可能ということです。 プロジェクトをリポジトリにアップロードする場合、このJARは依存関係のディスクリプタの一部として宣言されます。 アーカイブの扱いについては「アーカイブを作成する Creating archives、アーティファクトの設定については52章アーティファクトの公開 で、さらに詳しく学ぶことができます。

23.14.1. ManifestManifest

Each jar or war object has a manifest property with a separate instance of Manifest. When the archive is generated, a corresponding MANIFEST.MF file is written into the archive.

各jarやwarオブジェクトは、それぞれManifestのインスタンスであるmanifestプロパティを持ちます。 アーカイブが生成されるとき、対応するMANIFEST.MFファイルがアーカイブ内に作成されます。

例23.15 MANIFEST.MFのカスタマイズ

build.gradle

jar {
    manifest {
        attributes("Implementation-Title": "Gradle",
                   "Implementation-Version": version)
    }
}

You can create stand alone instances of a Manifest. You can use that for example, to share manifest information between jars.

独立したManifestインスタンスを生成することもできます。 これは例えば、複数のjar間でマニフェスト情報を共有する目的などに利用できます。

例23.16 manifestオブジェクトの作成

build.gradle

ext.sharedManifest = manifest {
    attributes("Implementation-Title": "Gradle",
               "Implementation-Version": version)
}
task fooJar(type: Jar) {
    manifest = project.manifest {
        from sharedManifest
    }
}

You can merge other manifests into any Manifest object. The other manifests might be either described by a file path or, like in the example above, by a reference to another Manifest object.

Manifestオブジェクトに他のマニフェストをマージすることもできます。 マージ対象のマニフェストは、ファイルパス、または上の例のように別のManifestオブジェクトの参照によって指定できます。

例23.17 特定のアーカイブ用にMANIFEST.MFを分離

build.gradle

task barJar(type: Jar) {
    manifest {
        attributes key1: 'value1'
        from sharedManifest, 'src/config/basemanifest.txt'
        from('src/config/javabasemanifest.txt',
             'src/config/libbasemanifest.txt') {
            eachEntry { details ->
                if (details.baseValue != details.mergeValue) {
                    details.value = baseValue
                }
                if (details.key == 'foo') {
                    details.exclude()
                }
            }
        }
    }
}

Manifests are merged in the order they are declared by the from statement. If the base manifest and the merged manifest both define values for the same key, the merged manifest wins by default. You can fully customize the merge behavior by adding eachEntry actions in which you have access to a ManifestMergeDetails instance for each entry of the resulting manifest. The merge is not immediately triggered by the from statement. It is done lazily, either when generating the jar, or by calling writeTo or effectiveManifest

マニフェストはfrom文で宣言された順にマージされます。 元のマニフェストとマージするマニフェストの双方に同じキーを持つ値が定義されている場合、デフォルトではマージするマニフェストのものが有効になります。 マージの振る舞いは、マージで生成されるマニフェストの各エントリに対するManifestMergeDetailsインスタンスにアクセスする、eachEntryアクションを追加することによって自在にカスタマイズ可能です。 マージはfrom文によって即座に実行されるわけではありません。 jarの生成時、またはwriteToeffectiveManifestの呼び出し時に、遅延して実行されます。

You can easily write a manifest to disk.

マニフェストをディスクに書き出すのは簡単です。

例23.18 特定のアーカイブ用にMANIFEST.MFを分離

build.gradle

jar.manifest.writeTo("$buildDir/mymanifest.mf")

23.15. アップロードUploading

How to upload your archives is described in 52章アーティファクトの公開 .

作成したアーカイブをアップロードする方法は、52章アーティファクトの公開 で説明しています。



[16] The JUnit wiki contains a detailed description on how to work with JUnit categories: https://github.com/junit-team/junit/wiki/Categories.

[17] The TestNG documentation contains more details about test groups: http://testng.org/doc/documentation-main.html#test-groups.