Gradle で Multi-project を作成する ( 感想 )
記事一覧はこちらです。
Multi-project は Gradle Guides の Creating Multi-project Builds を見ながらやればそれ程難しくはない印象です。単に1つのプロジェクトに複数のサブプロジェクトを入れるだけ(スタブやテスト用のアプリケーションを置くだけで設定の共通化をしない)ならば settings.gradle に include を書くだけでよいのは簡単で便利だなと思いました。
Spring Boot ベースのプロジェクトで実行可能 Jar ではなくライブラリの jar を作成するには build.gradle に
bootJar { enabled = false } jar { enabled = true }
を記述すればよいということも今回初めて知りました。Spring Boot もバージョン 2.x から bootJar タスクで実行可能 Jar を作成するようになりましたが、バージョン 1.x の頃の記事を見直してみると jar タスクを実行してから bootRepackage タスクを実行していました。これまでこの違いをきちんと認識出来ていませんでした。。。
実行可能 Jar を起動するのに launcher subclass というものがあること、launcher subclass には JarLauncher, WarLauncher, PropertiesLauncher があること、PropertiesLauncher を使用すれば実行可能 Jar の外側に置いたライブラリ Jar を利用することができること、も今回始めて知りました。PropertiesLauncher を使用するかと聞かれると1つの実行可能 Jar にまとめてリリースした方がミスしなさそうなので自分は使用しない気がしますが、実際に本番でも利用されているものなのでしょうか?
Vue.js のプロジェクトで生成したファイルを Spring Boot の実行可能 Jar に含めようとするのは意外に大変でした。
- まさかデフォルトでは build タスクが存在しないとは。。。 Base Plugin を使えばよいのですが、Gradle は Java のプロジェクトで使われることが多く Java のプロジェクトでは Java Plugin が使われるので Base Plugin の存在になかなか気づけませんでした。
- build タスクを実行した時のサブプロジェクトの実行順がアルファベット順になるということも初めて知りました。今回 backend-app と frontend-app という名前にしたので、frontend-app → backend-app の順に build したいのにいろいろ設定しても backend-app → frontend-app の順が変わりませんでした。最終的には
copyDistToStatic.dependsOn ":frontend-app:build"
と記述することで解決しましたが、他にも解決策として書かれている記事をいくつか見つけて試したのですがなかなか変わらなかったんですよね。まだまだ Gradle を理解できていませんね。。。
今更ながら draw.io のことを知りましたが、とても便利ですね。これで個人・商用問わず無料らしいとは驚きです。EIP の Shape も結構揃っているので Spring Integration のフローを記述するのにも使えそうです。