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.kts
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の定義を記述します。