1. 概要

このチュートリアルでは、Gradleビルドスクリプトで依存関係を宣言する方法について説明します。 この例では、 Gradle6.7を使用します。

2. 典型的な構造

Javaプロジェクト用の簡単なGradleスクリプトから始めましょう。

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'
    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE'
}

上記のように、プラグインリポジトリ、依存関係の3つのコードブロックがあります。

まず、 plugins ブロックは、これがJavaプロジェクトであることを示しています。 次に、dependencies ブロックは、プロジェクトの本番ソースコードをコンパイルするために必要なspring-boot-starter依存関係のバージョン2.3.4。RELEASEを宣言します。 さらに、プロジェクトのテストスイートをコンパイルするにはspring-boot-starter-testが必要であるとも記載されています。

Gradleビルドは、 repository ブロックで定義されているように、すべての依存関係をMavenCentralリポジトリからプルダウンします。

依存関係を定義する方法に焦点を当てましょう。

3. 依存関係の構成

依存関係を宣言できるさまざまな構成があります。 この点に関しては、後で説明するように、多かれ少なかれ正確にすることを選択できます。

3.1. 依存関係を宣言する方法

まず、構成には4つの部分があります。

  • group –組織、会社、またはプロジェクトの識別子
  • 名前–依存関係識別子
  • バージョン–インポートするバージョン
  • 分類子–同じグループ名前、およびバージョンの依存関係を区別するのに役立ちます

依存関係は2つの形式で宣言できます。 契約形式では、依存関係をStringとして宣言できます。

implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'

代わりに、拡張フォーマットを使用すると、Mapとして記述できます。

implementation group:'org.springframework.boot', name: 'spring-boot-starter', version: '2.3.4.RELEASE'

3.2. 構成の種類

さらに、Gradleは多くの依存関係構成タイプを提供します。

  • api –依存関係を明示的にし、クラスパスで公開するために使用されます。 たとえば、ライブラリを実装してライブラリの消費者に透過的にする場合
  • 実装–本番ソースコードをコンパイルするために必要であり、純粋に内部的なものです。 パッケージの外には露出していません
  • compileOnly –ソースのみの注釈や注釈プロセッサなど、コンパイル時にのみ宣言する必要がある場合に使用されます。 ランタイムクラスパスまたはテストクラスパスには表示されません
  • compileOnlyApi –コンパイル時に必要な場合、およびコンシューマーのクラスパスに表示する必要がある場合に使用されます
  • runtimeOnly –実行時にのみ必要であり、コンパイル時に使用できない依存関係を宣言するために使用されます
  • testImplementation –テストのコンパイルに必要
  • testCompileOnly –テストコンパイル時にのみ必要
  • testRuntimeOnly –テスト実行時にのみ必要

Gradleの最新バージョンでは、 compile testCompile runtime、testRuntimeなどの一部の構成が廃止されていることに注意してください。書き込み中、それらはまだ利用可能です。

4. 外部依存の種類

Gradleビルドスクリプトで発生する外部依存関係の種類について詳しく見ていきましょう。

4.1. モジュールの依存関係

基本的に、依存関係を宣言する最も一般的な方法は、リポジトリを参照することです。 Gradleリポジトリは、 group name 、およびversionによって編成されたモジュールのコレクションです。

実際のところ、Gradleはrepositoryブロック内の指定されたリポジトリから依存関係を取得します。

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter:2.3.4.RELEASE'
}

4.2. ファイルの依存関係

プロジェクトが常に自動化された依存関係管理を使用するとは限らないことを考えると、一部のプロジェクトは、ソースコードまたはローカルファイルシステムの一部として依存関係を編成します。 したがって、依存関係がある正確な場所を指定する必要があります。

この目的のために、 files を使用して、依存関係のコレクションを含めることができます。

dependencies {
    runtimeOnly files('libs/lib1.jar', 'libs/lib2.jar')
}

同様に、 filetree を使用して、ディレクトリにjarファイルの階層を含めることができます。

dependencies {
    runtimeOnly fileTree('libs') { include '*.jar' }
}

4.3. プロジェクトの依存関係

あるプロジェクトは別のプロジェクトに依存してコードを再利用できるため、Gradleはその機会を提供してくれます。

私たちのプロジェクトがsharedプロジェクトに依存していることを宣言したいとしましょう。

dependencies { 
    implementation project(':shared') 
}

4.4. Gradleの依存関係

タスクやプラグインの開発など、特定のケースでは、使用しているGradleバージョンに属する依存関係を定義できます。

dependencies {
    implementation gradleApi()
}

5. buildScript

前に見たように、ソースコードの外部依存関係を宣言し、dependenciesブロック内でテストすることができます。 同様に、 buildScript ブロックを使用すると、サードパーティのプラグインやタスククラスなどのGradleビルドの依存関係を宣言できます。 特に、 buildScript ブロックがないと、Gradleのすぐに使える機能しか使用できません。

以下では、 SpringBootプラグインをMavenCentralからダウンロードして使用することを宣言します。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.3.4.RELEASE' 
    }
}
apply plugin: 'org.springframework.boot'

したがって、デフォルトの依存関係がないため、外部依存関係をダウンロードするソースを指定する必要があります。

上記の説明は、古いバージョンのGradleに関連しています。 代わりに、新しいバージョンでは、より簡潔な形式を使用することができます。

plugins {
    id 'org.springframework.boot' version '2.3.4.RELEASE'
}

6. 結論

この記事では、Gradleの依存関係、それらを宣言する方法、およびさまざまな構成タイプについて説明しました。

これらの点を考慮して、この記事のソースコードはGitHubから入手できます。