Gradle で Multi-project を作成する ( その6 )( Multi-project は settings.gradle に include を書くだけでもよいのでは? )
概要
記事一覧はこちらです。
Gradle で Multi-project を作成する ( その5 )( lib+webappx2編、Spring Boot ベースの Web アプリケーション(スタブ)のプロジェクトを作成する ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
参照したサイト・書籍
目次
- 2つ Multi-project を作成した上での考察。。。include だけでもいいのでは?
- gradle-multiprj-includeonly ディレクトリを作成する
- Gradle Wrapper のファイル一式をコピーする
gradlew init
コマンドを実行する- IntelliJ IDEA で gradle-multiprj-includeonly プロジェクトを開く
- IntelliJ IDEA で sample-lib プロジェクトを新規作成する
- setting.gradle に
include 'sample-lib'
を追加する - sample-lib プロジェクトに StrNumUtils クラスを追加する
- IntelliJ IDEA で sample-webapp プロジェクトを新規作成する
- setting.gradle に
include 'sample-webapp'
を追加する - sample-webapp プロジェクトに SampleController クラスを追加する
- 動作確認
- まとめ
手順
2つ Multi-project を作成した上での考察。。。include だけでもいいのでは?
ここまで2つ Multi-project を作成してみましたが、そこまで凝る必要がなければ setting.gradle に include 文を記述するだけで十分な気がするんですよね。。。
たぶんこんな感じで作っても Multi-project になる気がします。
- ルートディレクトリの直下に build.gradle を作成してサブプロジェクトの共通の設定を書けば確かに便利だが、実はルートディレクトリ直下には build.gradle はなくてもよい(サブプロジェクト毎に別々に build.gradle があるだけでOK)。
- ルートディレクトリの下に作成したサブプロジェクトの中のディレクトリ・ファイルはそのままでもよい(何も削除する必要はない)。
- ルートディレクトリ直下の setting.gradle に
include '<サブプロジェクト名>'
を記述すれば Multi-project になる。
試してみます。以下のような作り方でも Multi-project になるはずです。
- プロジェクトのルートディレクトリを作成する。
- Gradle Wrapper のファイル一式をコピーする。
gradlew init
コマンドを実行する。- IntelliJ IDEA でプロジェクトを開く。
- 後は以下の作業の繰り返し。
gradle-multiprj-includeonly ディレクトリを作成する
D:\project-springboot\ksbysample-boot-miscellaneous
の下に gradle-multiprj-includeonly ディレクトリを作成します。
Gradle Wrapper のファイル一式をコピーする
gradle-multiprj-lib-webapp2 プロジェクトから Gradle Wrapper のファイル一式をコピーします。
gradlew init
コマンドを実行する
コマンドラインから gradlew init
コマンドを実行します。
gradle-multiprj-includeonly ディレクトリ内に setting.gradle、build.gradle が作成されて、
setting.gradle には以下の内容が記述されています。コメントの部分は削除します。
/* * This file was generated by the Gradle 'init' task. * * The settings file is used to specify which projects to include in your build. * * Detailed information about configuring a multi-project build in Gradle can be found * in the user manual at https://docs.gradle.org/5.4/userguide/multi_project_builds.html */ rootProject.name = 'gradle-multiprj-includeonly'
build.gradle は以下の内容が記述されています。今回このファイルは何も変更しません。
/* * This file was generated by the Gradle 'init' task. * * This is a general purpose Gradle build. * Learn how to create Gradle builds at https://guides.gradle.org/creating-new-gradle-builds/ */
IntelliJ IDEA で gradle-multiprj-includeonly プロジェクトを開く
IntelliJ IDEA で gradle-multiprj-includeonly プロジェクトを開きます。Project Tool Window と Gradle Tool Window は以下のように表示されます。
IntelliJ IDEA で sample-lib プロジェクトを新規作成する
gradle-multiprj-includeonly ディレクトリの下に sample-lib プロジェクトを新規作成します。Gradle プロジェクトとして作成します。
ディレクトリ・ファイルは以下のようになります。今回はこのディレクトリの中は何も削除しません(Gradle Wrapper も残したままです)。
setting.gradle に include 'sample-lib'
を追加する
setting.gradle に include 'sample-lib'
を追加します。
rootProject.name = 'gradle-multiprj-includeonly' include 'sample-lib'
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、Gradle Tool Window に sample-lib プロジェクトが表示されます。
sample-lib プロジェクトに StrNumUtils クラスを追加する
sample-lib/src/main/java の下に ksbysample.lib.samplelib パッケージを作成した後、StrNumUtils.java を新規作成して以下の内容を記述します。
package ksbysample.lib.samplelib; public class StrNumUtils { public static String plus(String v1, String v2) { return String.valueOf(Integer.parseInt(v1) + Integer.parseInt(v2)); } }
IntelliJ IDEA で sample-webapp プロジェクトを新規作成する
gradle-multiprj-includeonly ディレクトリの下に sample-webapp プロジェクトを新規作成します。Spring Initializr で作成します。
ディレクトリ・ファイルは以下のようになります。このディレクトリの中は何も削除しません。
setting.gradle に include 'sample-webapp'
を追加する
setting.gradle に include 'sample-webapp'
を追加します。
rootProject.name = 'gradle-multiprj-includeonly' include 'sample-lib' include 'sample-webapp'
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、Gradle Tool Window に sample-webapp プロジェクトが表示されます。
sample-webapp プロジェクトに SampleController クラスを追加する
sample-webapp プロジェクトの build.gradle に sample-lib プロジェクトへの依存関係を追加します。
plugins { id 'org.springframework.boot' version '2.1.4.RELEASE' id 'java' } apply plugin: 'io.spring.dependency-management' group = 'ksby.ksbysample-boot-miscellaneous' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' runtimeOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation project(":sample-lib") }
- dependencies block に
implementation project(":sample-lib")
を追加します。
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
sample-webapp/src/main/java/ksbysample/webapp/samplewebapp/SampleController.java を新規作成して以下の内容を記述します。
package ksbysample.webapp.samplewebapp; import ksbysample.lib.samplelib.StrNumUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/sample") public class SampleController { @RequestMapping @ResponseBody public String index() { return StrNumUtils.plus("1", "2"); } }
動作確認
最初に clean タスク実行 → Rebuild Project 実行 → build タスク実行を行うと、BUILD SUCCESSFUL のメッセージが出力されることを確認します。
Run/Debug Configuration に SampleWebappApplication が自動で登録されているので、ここから Tomcat を起動して、
http://localhost:8080/sample にアクセスすると 3
と表示されます。
Project Tool Window で見ると以下のディレクトリ構成になっており、sample-lib-1.0-SNAPSHOT.jar、sample-webapp-0.0.1-SNAPSHOT.jar が生成されています。
コマンドプロンプトから java -jar sample-webapp-0.0.1-SNAPSHOT.jar
コマンドで Tomcat を起動してから、
http://localhost:8080/sample にアクセスしても 3
と表示されます。
まとめ
setting.gradle に include 文を書くだけでも Multi-project とみなされますね。プロジェクトが1つでも最初から Multi-project のディレクトリ・ファイル構成で作っておいて、開発途中にちょっとしたスタブが欲しい時にはサブプロジェクトを作成して setting.gradle に include を追加して対応する、というのもありなのかもしれません。
履歴
2019/04/24
初版発行。