0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

株式会社ゆめみの23卒Advent Calendar 2023

Day 18

JUnit 5のビルドシステムを探る(その4)

Posted at
YUMEMI New Grad Advent Calendar 2023

前回はJUnit 5で使用されているライブラリのバージョン定義についてみました。今回は個々のプロジェクトの設定についてみていきます。

JUnit 5のライセンス Eclipse Public License - v 2.0

JUnit 5のリポジトリ

この記事は f5b78f68c6a90dfa63611c7a10027581c5d913ba での内容をベースにしています。
記事の中に出てくるコードはすべて上記のリポジトリや公式ドキュメントからの引用や一部改変です。

概要

前回は使用されているライブラリのバージョンの記述についてみていきました。
今回は個々のプロジェクトでの設定についてみていきます。

プロジェクトの設定ファイル

一般的にはプロジェクトの設定には build.gradle(.kts) を使用します。
Junit 5では以下のドキュメントのように設定ファイルの名称を変更し、(プロジェクト名).gradle.kts のファイルを使用しています。

project.buildFileName を変更することで設定ファイルを変更できます。

junit-jupiter-api

このプロジェクトではJUnit 5で使われるAPIを定義しています。org.junit.jupiter.api のパッケージの内容です。
大部分はJavaで書かれていますが、一部Assertionの定義にKotlinが使われている箇所があります。

このプロジェクトの定義は以下のとおりです。

kotlin junit-jupiter-api.gradle.kts
plugins {
	id("junitbuild.kotlin-library-conventions")
	`java-test-fixtures`
}

description = "JUnit Jupiter API"

dependencies {
	api(platform(projects.junitBom))
	api(libs.opentest4j)
	api(projects.junitPlatformCommons)

	compileOnlyApi(libs.apiguardian)

	compileOnly(kotlin("stdlib"))

	osgiVerification(projects.junitJupiterEngine)
	osgiVerification(projects.junitPlatformLauncher)
}

tasks {
	jar {
		bundle {
			val version = project.version
			bnd("""
				Require-Capability:\
					org.junit.platform.engine;\
						filter:='(&(org.junit.platform.engine=junit-jupiter)(version>=${'$'}{version_cleanup;${version}})(!(version>=${'$'}{versionmask;+;${'$'}{version_cleanup;${version}}})))';\
						effective:=active
			""")
		}
	}
}

プラグインの使用、プロジェクトの命名、依存関係の記述、OSGiの設定(tasks.jar.bundle の箇所)しかありません。
大部分の設定は junitbuild.kotlin-library-conventions のプラグインに書かれているとわかります。
junit-jupiter-api が依存しているプラグインを列挙してみます。junitbuild から始まっているのが共通のプラグインです。

つまり、junit-jupiter-apiのビルドの設定を確認したいとなったらこれらのプラグインの設定内容を確認すればいいということになります。

dependenciesはVersion Catelogで定義しているものの他に他プロジェクトへの参照もあります。マルチプロジェクトならではの構成です。

他プロジェクト

他のプロジェクトも似た構成になっています。共通のプラグインを使用して大部分の設定を行い、個々のプロジェクトでは依存するライブラリの定義やそれに付随する埋め込み(shadowプラグイン)の設定などが記述されています。

まとめ

今回はJUnit 5の個々のプロジェクトの設定を、junit-jupiter-api のプロジェクトを例にしてみていきました。
大部分の設定を共通化し、各プロジェクトでの記述を少なくするようになっていることがわかります。
どこにどのような設定がされているのかはファイル名にまとまっているので探しやすいです。JUnit 5ではやっているけどGradleでどうやっているのかわからない時に、参考にしやすいと思いました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?