非常に大規模で複雑なエンタープライズアプリ用にGradleを試しています。マルチプロジェクトビルド構造を使用しており、Gradleの並列実行機能に非常に興奮しています。
コードベースは、次のようなドメインレイヤーで構成されています。
UIモジュール(〜20)->共有UI->ドメイン->dao->フレームワーク
依存関係は一方向であり、ビルドはボトムアップで行われます。
残念ながら、ビルド時間の大幅な向上は見られません。以前にアリで得ていたものとほとんど同じです。
並列モードでのタスクの実行シーケンスを見ると、正しく見えないことがいくつかあります。Gradleは、コアレイヤーを構築するときに、最初にタスクを順番に実行することを期待しています。したがって、フレームワーク、dao、ドメイン、共有UIをアセンブルした後、他のすべてを並行してキックする必要があります。
しかし、私たちが見ている実行シーケンスは、次のようなものです。
framework.assemble-> dao.assemble-> domain.assemble-> shared.ui.assemble->その他のUImodules.assmble(並列)->war->その他のUI.check+ shared.ui.check + dao.check (並行して)-> domain.check-> framework.check
ボトルネックは、ドメインとフレームワークのチェックを並行してではなく順番に実行しているときに終了します。これらの2つのモジュールは、約12kの単体テストを備えた私たちにとって最大のモジュールであり、実行には約4分かかります。
Gradleタスクを使用して依存関係を調べることに多くの時間を費やしました。これらのモジュールのすべてのテストタスクは完全に独立しており、実行を妨げるものは何もありません。
これが既知の問題なのか、それともGradleが並列モードで実行順序を決定する方法として、Gradleで追加のデバッグを有効にして、より多くの洞察を得る方法があるのか疑問に思っています。どんな助けでも大歓迎です。