1.概要

この記事では、

Gradle Javaプロジェクトのさまざまな構成ファイルについて説明します

。また、実際のビルドの詳細も表示されます。

Gradleの概要については、

この記事

を確認してください。

2.

build.gradle


gradle init –type java-application

を実行して、新しいJavaプロジェクトを作成したとします。これで、次のディレクトリとファイル構造を持つ新しいプロジェクトができました。

build.gradle
gradle
    wrapper
        gradle-wrapper.jar
        gradle-wrapper.properties
gradlew
gradlew.bat
settings.gradle
src
    main
        java
            App.java
    test
        java
            AppTest.java

私たちは

build.gradle

ファイルをプロジェクトの核心と見なすことができます。この例の結果のファイルは次のようになります。

plugins {
    id 'java'
    id 'application'
}

mainClassName = 'App'

dependencies {
    compile 'com.google.guava:guava:23.0'

    testCompile 'junit:junit:4.12'
}

repositories {
    jcenter()
}

  • Groovyコード、より正確にはビルドを記述するためのGroovyベースのDSL(ドメイン固有言語)で構成されています。ここで依存関係を定義したり、依存関係の解決に使用されるMavenリポジトリのようなものを追加することもできます。

Gradleの基本的な構成要素はプロジェクトとタスクです。この場合、

java

プラグインが適用されるため、Javaプロジェクトの構築に必要なすべてのタスクが暗黙的に定義されます。これらのタスクのいくつかは、

assemble



check



build



jar



javadoc



clean

、その他多数です。

これらのタスクは、Javaプロジェクトにとって有用な依存関係グラフを記述するようにも設定されています。つまり、通常はビルドタスクを実行するのに十分であり、Gradle(およびJavaプラグイン)は必要なすべてのタスクを実行します。 。

たとえばDockerイメージを作成するなど、特別なタスクを追加する必要がある場合は、それも

build.gradle

ファイルに入れられます。タスクの最も簡単な定義は、次のとおりです。

task hello {
    doLast {
        println 'Hello Baeldung!'
    }
}

これをGradle CLIへの引数として指定することでタスクを実行できます。

$ gradle -q hello
Hello Baeldung!

役に立ちませんが、もちろん「Hello Baeldung!」と印刷します。

マルチプロジェクトビルドの場合は、おそらく各プロジェクトに1つずつ、複数の異なる

build.gradle

ファイルがあります。


build.gradle

ファイルはhttps://docs.gradle.org/current/javadoc/org/gradle/api/Project.html[

Project

]インスタンスに対して実行され、サブプロジェクトごとに1つのProjectインスタンスが作成されます。

build.gradle

ファイルで定義できる上記のタスクは、https://docs.gradle.org/current/javadoc/org/gradle/api/Task.htmlのコレクションの一部として

Project

インスタンス内にあります。

Task

]オブジェクトタスク自体は、順序付きリストとしての複数のアクションで構成されています。

前の例では、

hello


Task

オブジェクトの

doLast(Closure action)

を呼び出して、このリストの最後に “Hello Baeldung!”を印刷するためのGroovyクロージャーを追加しました。

Task

の実行中、Gradleは

Action.execute(T)

メソッドを呼び出すことによって、それぞれの

Actions

を順番に実行します。

3.

settings.gradle

Gradleは

settings.gradle

ファイルも生成します。

rootProject.name = 'gradle-example'


settings.gradle

ファイルもGroovyスクリプトです。

build.gradleファイルとは対照的に、Gradleのビルドごとに実行されるsettings.gradleファイルは1つだけです。これを使ってマルチプロジェクトビルドのプロジェクトを定義できます。

その上、ビルドのさまざまなライフサイクルフックの一部としてコードを登録することも可能です。

このフレームワークでは、マルチプロジェクトビルドに

settings.gradle

が存在する必要がありますが、シングルプロジェクトビルドにはオプションです。

このファイルは、ビルドのhttps://docs.gradle.org/current/dsl/org.gradle.api.initialization.Settings.html[

Settings

]インスタンスを作成し、それに対してファイルを実行して構成することによって使用されます。つまり、

settings.gradle

ファイルでサブプロジェクトを次のように定義しています。

include 'foo', 'bar'

そして、Gradleはビルドを作成するときに

Settings

インスタンスの

void include(String …​ projectPaths)

メソッドを呼び出しています。

4.

gradle.properties

  • Gradleは

    gradle.properties

    ファイルをデフォルトで作成しません。プロジェクトのルートディレクトリ、

    GRADLE

    USER

    HOME

    内、または

    -Dgradle.user.home

    コマンドラインフラグで指定された場所など、さまざまな場所に配置できます。

このファイルはキーと値のペアで構成されています。フレームワーク自体の振る舞いを設定するためにそれを使用することができ、それは設定のためにコマンドラインフラグを使用する代わりになります。

考えられるキーの例は次のとおりです。


  • org.gradle.caching =(true、false)


  • org.gradle.daemon =(true、false)


  • org.gradle.parallel =(true、false)


  • org.gradle.logging.level =(静か、警告、ライフサイクル、情報、デバッグ)

また、このファイルを使用して

Project

オブジェクトに直接プロパティを追加することもできます(例:名前空間を持つプロパティ:

org.gradle.project.property

to

set

)。

もう1つのユースケースは、次のようにJVMパラメータを指定することです。

org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8


gradle.properties

ファイルを解析するにはJVMプロセスを起動する必要があることに注意してください。つまり、これらのJVMパラメータは別々に起動されたJVMプロセスにのみ影響します。

5.一言で言えば

Gradleビルドの一般的なライフサイクルは、デーモンとして実行しないと仮定すると、次のようにまとめることができます。

  • 新しいJVMプロセスとして起動します


  • gradle.properties

    ファイルを解析してGradleを設定します

それに応じて
** 次に、ビルド用の

Settings

インスタンスを作成します。

  • 次に、

    settings

    に対して

    settings.gradle

    ファイルを評価します。


** 設定された内容に基づいて

Projects

の階層を作成します。


Settings

オブジェクト
** 最後に、プロジェクトに対して各

build.gradle

ファイルを実行します。

6.まとめ

さまざまなGradle設定ファイルがさまざまな開発目的をどのように満たすかを見てきました。私たちのプロジェクトのニーズに基づいて、Gradle自体と同様にGradleビルドを設定するためにそれらを使うことができます。