プロジェクト

全般

プロフィール

Gradle Java複数モジュールのビルド定義

Java Module System対応

ライブラリとアプリケーションから成るプロジェクト

1つのライブラリと1つのアプリケーション

EarthGadgetプロジェクトは、次の2つのビルドモジュールから構成されます。

  • アプリケーションモジュール earth
  • ライブラリモジュール gadgetsupport

ディレクトリ構造は次です。

EarthGadget/
  +-- settings.gradle
  +-- earth/
  |     +-- build.gradle
  |     +-- src/
  +-- gadgetsupport/
        +-- build.gradle
        +-- src/

Gradleではモジュールを束ねるトップディレクトリがルートモジュールとなります。ルートモジュール(トップディレクトリ)にも build.gradle ファイルを置いて、共通定義を記述することができます。しかし、ここでは、各モジュールの個別 build.gradle にビルド定義を書いた例を示します。

  • settings.gradle
    include 'earth', 'gadgetsupport'
    

ルートモジュールには最低限 settings.gradle に、構成するモジュール名を include で定義します。

  • gadgetsupport/build.gradle
    plugins {
        id 'java-library'
    }
    
    java {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
        modularity.inferModulePath = true
    }
    

gadgetsupport はライブラリモジュールで、依存関係を持たない、またJava SE 11仕様でコンパイルします。

  • earth/build.gradle
    plugins {
        id 'application'
    }
    
    java {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
        modularity.inferModulePath = true
    }
    
    dependencies {
        implementation project(':gadgetsupport')    
    }
    
    application {
        mainModule = 'com.torutk.gadget.earth'
        mainClass = 'com.torutk.gadget.earth.EarthGadgetApp'
    }
    

earth はアプリケーションモジュールで、gadgetsupport ライブラリに依存しています。複数モジュールのビルド定義では、依存関係にprojectで別モジュールへの依存を記述します。また、JPMSモジュールシステムのメインモジュール(起動時のMainクラスを提供するモジュール)となるので、mainModuleおよびmainClassの定義を記述します。