Gradleの標準DSLがKotlinとなってから早くも半年以上が経ちました。
JetBrainsによる紹介ブログ
この記事ではKotlin DSLが使われているプロジェクトである、JUnit 5の設定ファイルについて見ていきます。
JUnit 5のライセンス Eclipse Public License - v 2.0
JUnit 5のリポジトリ
この記事はf5b78f68c6a90dfa63611c7a10027581c5d913baのコミットでの内容をもとにしています。ビルドシステムは随時更新されるため、最新のコードを追いやすいようコードのリンクはmainブランチのものとしています。
概要
- JUnit 5リポジトリの構成について <この記事>
- 共通で使われている設定について
- バージョンの記述について
- 個々のプロジェクトの設定について
JUnit 5リポジトリの構成について
JUnit 5では junit-jupiter
をはじめとする23個のサブプロジェクトが定義されています。リポジトリのルート直下に各サブプロジェクトがディレクトリとして配置されている構造です。
これらのプロジェクトはリポジトリのルートにある settings.gradle.kts
から読み込まれています。
各サブプロジェクトの配下にはそのプロジェクトでの設定を記述する <project name>.gradle.kts
ファイルが置かれています。個々のプロジェクトで使われる、テストや公開の設定が記述されています。
settings.gradle.kts
の設定
このファイルでは主に2つのことが記述されています。
- プロジェクトの構成
- Build Scanの設定
- ビルド時の設定
プロジェクトの構成
settings.gradle.kts
にはサブプロジェクトを読み込む設定を記述します。
例えば
include("junit-jupiter-api")
の記述により、junit-jupiter-api
のプロジェクトを読み込んでいます。
JUnit 5ではすべてのサブプロジェクトが列挙されています。ここで列挙したプロジェクトたちは rootProject.children
で参照され、その後の各プロジェクトの設定ファイルの存在確認に使われています。
またプロジェクト間で共通する内容を記述しているプラグインの読み込みも記述されています。
リポジトリ内に置かれたプラグインの読み込みには includeBuild
を使用します。
JUnit 5の settings.gradle.kts
には以下のように記述があることから、共通設定は gradle/plugins
配下のファイルに記述されていることがわかります。
includeBuild("gradle/plugins")
Build Scanの設定
Build ScanとはGradleで使用できるビルドの実行記録です。どのようなタスクが実行されたか、どのような依存関係になっているかなどが記録されます。
dependenciesに記述した各種依存関係で、推移的な依存関係の把握や実際に使用されているバージョンについての記録も残ります。どのライブラリが何に依存しているかがよくわかります。
pluginについても同様の依存関係の分析ができます。
また各タスクの所要時間をタイムラインで見られるので、時間のかかっているタスクの把握がしやすいです。並列化の恩恵もよくわかります。
デフォルトの状態では https://scans.gradle.com/ にBuild Scanが公開されます。設定をすることで独自のサーバーに公開するよう設定することもできます。
(個人でお試しされる際には一旦CIなどを利用して、どのような情報がアップロードされるかを確認するのがおすすめです。コンソールのログやビルドの設定の中に個人情報が含まれる可能性があります。デフォルトの状態ではユーザー名やIPが公開されるようになっています)
JUnit 5ではJUnit独自のサーバーにBuild Scanが公開されています。
他にもタグの設定や匿名化の設定がされています。
ビルド時の設定
ビルド時の設定ですが、 settings.gradle.kts
にはキャッシュについて記述されています。
JUnit 5ではリモートにビルドのキャッシュが保存されており、複数のマシンで使いまわせるようになっています。
CIでの時間削減に大きく貢献しているようです。
gradle
ディレクトリには何が入っているか
JUnit 5のリポジトリ直下のディレクトリは大体がサブプロジェクトなのですが、 gradle
はサブプロジェクトではありません。
このディレクトリにはその名の通り gradle
で参照するためのファイルが入っています。
特にプロジェクト内で共通に使用されるファイルが入っています。Linterの設定(コードのフォーマットからJavadocのスタイルまで定義されています)やライセンス表記の定義ファイルが置かれています。
また各プロジェクトから参照される共通のプラグインと、依存関係のバージョンをひとまとめにした設定ファイルがあります。
おわりに
この記事ではJUnit 5のリポジトリの構成について見ていきました。
主に settings.gradle.kts
で記述されている設定や、 gradle
ディレクトリの中身について触れました。
次回は gradle
ディレクトリ内で定義されているプラグインについてみていきます。