<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>io.foldright</groupId>
	<artifactId>cffu-parent</artifactId>
	<version>1.0.0-Alpha13</version>
	<packaging>pom</packaging>
	<name>${project.artifactId}</name>
	<description>cffu parent</description>
	<url>https://github.com/foldright/cffu</url>
	<inceptionYear>2023</inceptionYear>

	<licenses>
		<license>
			<name>Apache 2</name>
			<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
			<comments>A business-friendly OSS license</comments>
		</license>
	</licenses>
	<scm>
		<connection>scm:git:git@github.com:foldright/cffu.git</connection>
		<developerConnection>scm:git:git@github.com:foldright/cffu.git</developerConnection>
		<url>https://github.com/foldright/cffu</url>
	</scm>
	<issueManagement>
		<system>GitHub Issues</system>
		<url>https://github.com/foldright/cffu/issues</url>
	</issueManagement>
	<ciManagement>
		<system>GitHub Actions</system>
		<url>https://github.com/foldright/cffu/actions</url>
	</ciManagement>
	<organization>
		<name>FoldRight</name>
		<url>https://foldright.io</url>
	</organization>
	<developers>
		<developer>
			<name>Jerry Lee</name>
			<id>oldratlee</id>
			<email>oldratlee(AT)gmail(DOT)com</email>
			<roles>
				<role>Developer</role>
			</roles>
			<timezone>+8</timezone>
			<url>https://github.com/oldratlee</url>
			<organization>FoldRight</organization>
			<organizationUrl>https://foldright.io</organizationUrl>
		</developer>
	</developers>

	<modules>
		<!-- cffu modules -->
		<module>cffu-core</module>
		<module>cffu-kotlin</module>
		<module>cffu-bom</module>
		<!-- cffu SPI extension implementation modules -->
		<module>cffu-ttl-executor-wrapper</module>
	</modules>

	<properties>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
		<!-- A Guide to Maven Encoding https://www.baeldung.com/maven-encoding -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>
		<maven.deploy.skip>false</maven.deploy.skip>
		<maven.enforcer.pom.version.regex>^\d(\.\d+)?\.(\d+|x)-SNAPSHOT$</maven.enforcer.pom.version.regex>
		<release.pom.version.regex>^\d\.\d+\.\d+(-(Alpha|Beta|RC)\d+)?$</release.pom.version.regex>

		<spotbugs.annotations.version>4.8.6</spotbugs.annotations.version>
		<jsr305.version>3.0.2</jsr305.version>
		<jetbrains.annotations.version>24.1.0</jetbrains.annotations.version>

		<kotlin.version>1.9.24</kotlin.version>
		<kotlin.compiler.jvmTarget>${maven.compiler.source}</kotlin.compiler.jvmTarget>
		<!-- https://kotlinlang.org/docs/maven.html#specifying-compiler-options -->
		<kotlin.compiler.apiVersion>1.6</kotlin.compiler.apiVersion>

		<slf4j.version>2.0.13</slf4j.version>

		<!-- testing dependencies versions -->
		<junit5.version>5.10.3</junit5.version>
		<kotest.version>5.8.1</kotest.version>
	</properties>

	<dependencies>
		<!-- QA libs -->
		<dependency>
			<groupId>com.github.spotbugs</groupId>
			<artifactId>spotbugs-annotations</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.google.code.findbugs</groupId>
			<artifactId>jsr305</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.jetbrains</groupId>
			<artifactId>annotations</artifactId>
			<optional>true</optional>
		</dependency>

		<!-- logging libs -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>io.github.oshai</groupId>
			<artifactId>kotlin-logging-jvm</artifactId>
			<scope>test</scope>
		</dependency>

		<!-- testing libs -->
		<dependency>
			<groupId>io.kotest</groupId>
			<artifactId>kotest-runner-junit5-jvm</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>io.kotest</groupId>
			<artifactId>kotest-assertions-core-jvm</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>io.kotest</groupId>
			<artifactId>kotest-property-jvm</artifactId>
			<scope>test</scope>
		</dependency>
		<!--
			In order to run JUnit 5 test cases in IntelliJ IDEA, need include below dependencies. more info see:
			https://junit.org/junit5/docs/current/user-guide/#running-tests-ide-intellij-idea
			https://github.com/junit-team/junit5-samples/blob/main/junit5-jupiter-starter-maven/pom.xml#L29
		-->
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<!-- bom -->
			<dependency>
				<groupId>org.jetbrains.kotlin</groupId>
				<artifactId>kotlin-bom</artifactId>
				<version>${kotlin.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.junit</groupId>
				<artifactId>junit-bom</artifactId>
				<version>${junit5.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>

			<!--
				QA libs
				make qa libs optional, smaller deployment
			-->
			<dependency>
				<!--
					JSR305 is already Dormant status, so SpotBugs does not release jsr305 jar file.
					Please continue using findbugs’ one, depend on spotbugs-annotations instead.
						https://spotbugs.readthedocs.io/en/stable/migration.html
				-->
				<groupId>com.github.spotbugs</groupId>
				<artifactId>spotbugs-annotations</artifactId>
				<version>${spotbugs.annotations.version}</version>
				<optional>true</optional>
			</dependency>
			<dependency>
				<groupId>com.google.code.findbugs</groupId>
				<artifactId>jsr305</artifactId>
				<version>${jsr305.version}</version>
				<optional>true</optional>
			</dependency>
			<dependency>
				<!-- https://www.jetbrains.com/help/idea/annotating-source-code.html -->
				<groupId>org.jetbrains</groupId>
				<artifactId>annotations</artifactId>
				<version>${jetbrains.annotations.version}</version>
				<optional>true</optional>
			</dependency>

			<!-- implementation dependencies -->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>transmittable-thread-local</artifactId>
				<version>2.14.5</version>
			</dependency>
			<dependency>
				<groupId>org.apache.commons</groupId>
				<artifactId>commons-lang3</artifactId>
				<version>3.14.0</version>
			</dependency>

			<!-- logging libs -->
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
				<version>${slf4j.version}</version>
			</dependency>
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-simple</artifactId>
				<version>${slf4j.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>io.github.oshai</groupId>
				<artifactId>kotlin-logging-jvm</artifactId>
				<version>7.0.0</version>
				<scope>test</scope>
			</dependency>

			<!-- testing libs -->
			<!-- https://github.com/kotlintest/kotlintest -->
			<dependency>
				<groupId>io.kotest</groupId>
				<artifactId>kotest-runner-junit5-jvm</artifactId>
				<version>${kotest.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>io.kotest</groupId>
				<artifactId>kotest-assertions-core-jvm</artifactId>
				<version>${kotest.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>io.kotest</groupId>
				<artifactId>kotest-property-jvm</artifactId>
				<version>${kotest.version}</version>
				<scope>test</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<distributionManagement>
		<snapshotRepository>
			<id>ossrh</id>
			<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
		</snapshotRepository>
	</distributionManagement>

	<build>
		<plugins>
			<plugin>
				<!--
					Compiling Kotlin and Java sources - Using Maven - Kotlin Programming Language
						https://kotlinlang.org/docs/maven.html#compile-kotlin-and-java-sources
					Making sure that the kotlin plugin is above the maven-compiler-plugin in your pom.xml file!
				-->
				<groupId>org.jetbrains.kotlin</groupId>
				<artifactId>kotlin-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>compile</id>
						<goals>
							<goal>compile</goal>
						</goals>
					</execution>
					<execution>
						<id>test-compile</id>
						<goals>
							<goal>test-compile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<executions>
					<!-- Replacing default-compile as it is treated specially by Maven -->
					<execution>
						<id>default-compile</id>
						<phase>none</phase>
					</execution>
					<!-- Replacing default-testCompile as it is treated specially by Maven -->
					<execution>
						<id>default-testCompile</id>
						<phase>none</phase>
					</execution>
					<execution>
						<id>java-compile</id>
						<phase>compile</phase>
						<goals>
							<goal>compile</goal>
						</goals>
					</execution>
					<execution>
						<id>java-test-compile</id>
						<phase>test-compile</phase>
						<goals>
							<goal>testCompile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-enforcer-plugin</artifactId>
				<executions>
					<execution>
						<id>enforces</id>
						<goals>
							<goal>enforce</goal>
						</goals>
						<configuration>
							<rules>
								<!--
									add maven-enforcer-plugin to make sure the right jdk is used
										https://stackoverflow.com/a/18420462/922688
								-->
								<requireJavaVersion>
									<version>19</version>
								</requireJavaVersion>
								<!-- official docs: https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html -->
								<requireMavenVersion>
									<version>3.3.9</version>
								</requireMavenVersion>
								<!-- https://maven.apache.org/enforcer/enforcer-rules/requireProperty.html -->
								<requireProperty>
									<property>project.version</property>
									<regex>${maven.enforcer.pom.version.regex}</regex>
									<regexMessage>Project version(${project.version}) format is invalid!</regexMessage>
								</requireProperty>
							</rules>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<!-- https://github.com/moditect/moditect -->
				<groupId>org.moditect</groupId>
				<artifactId>moditect-maven-plugin</artifactId>
				<executions>
					<execution>
						<id>add-module-infos</id>
						<phase>package</phase>
						<goals>
							<goal>add-module-info</goal>
						</goals>
						<configuration>
							<jvmVersion>9</jvmVersion>
							<overwriteExistingFiles>true</overwriteExistingFiles>
							<module>
								<!-- using `moduleInfoFile` is more IDE/editor friendly than `moduleInfoSource`/`moduleInfo` -->
								<moduleInfoFile>${project.basedir}/src/main/moditect/module-info.java</moduleInfoFile>
							</module>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-clean-plugin</artifactId>
					<version>3.4.0</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-resources-plugin</artifactId>
					<version>3.3.1</version>
				</plugin>
				<plugin>
					<groupId>org.jetbrains.kotlin</groupId>
					<artifactId>kotlin-maven-plugin</artifactId>
					<version>${kotlin.version}</version>
					<configuration>
						<args>
							<arg>-Werror</arg>
							<arg>-Xjvm-default=all</arg>
							<arg>-Xjsr305=warn</arg>
						</args>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.13.0</version>
					<configuration>
						<!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArgs -->
						<compilerArgs>
							<arg>-Xlint:unchecked</arg>
							<arg>-J-Duser.language=en_us</arg>
						</compilerArgs>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>3.3.0</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-jar-plugin</artifactId>
					<version>3.4.2</version>
				</plugin>
				<plugin>
					<!-- https://github.com/moditect/moditect -->
					<groupId>org.moditect</groupId>
					<artifactId>moditect-maven-plugin</artifactId>
					<version>1.2.2.Final</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-shade-plugin</artifactId>
					<version>3.6.0</version>
					<configuration>
						<shadeSourcesContent>true</shadeSourcesContent>
						<dependencyReducedPomLocation>
							${project.build.directory}/dependency-reduced-pom.xml
						</dependencyReducedPomLocation>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>3.3.1</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-javadoc-plugin</artifactId>
					<version>3.7.0</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>3.2.4</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-site-plugin</artifactId>
					<version>3.12.1</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-install-plugin</artifactId>
					<version>3.1.2</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>3.1.2</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-enforcer-plugin</artifactId>
					<version>3.5.0</version>
				</plugin>
				<plugin>
					<groupId>io.github.git-commit-id</groupId>
					<artifactId>git-commit-id-maven-plugin</artifactId>
					<version>9.0.1</version>
				</plugin>
				<plugin>
					<groupId>com.github.spotbugs</groupId>
					<artifactId>spotbugs-maven-plugin</artifactId>
					<version>4.8.6.1</version>
				</plugin>
				<plugin>
					<groupId>org.jacoco</groupId>
					<artifactId>jacoco-maven-plugin</artifactId>
					<version>0.8.12</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
	<profiles>
		<profile>
			<id>enable-test-jar-if-not-maven-skip-test</id>
			<activation>
				<property>
					<name>maven.test.skip</name>
					<value>!true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-jar-plugin</artifactId>
						<executions>
							<execution>
								<goals>
									<!--
										Guide to using attached tests
										reuse the tests that you have created for one project in another
											https://maven.apache.org/guides/mini/guide-attached-tests.html
										How to create a jar containing test classes
											https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html
									-->
									<goal>test-jar</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>disable-javac-options-warning-for-java21+</id>
			<activation>
				<jdk>[21,)</jdk>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-compiler-plugin</artifactId>
						<configuration>
							<compilerArgs>
								<arg>-Xlint:-options</arg>
							</compilerArgs>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>

		<profile>
			<id>enforce-when-release</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforces</id>
								<configuration>
									<rules>
										<requireJavaVersion>
											<version>21</version>
										</requireJavaVersion>
										<!-- https://www.mojohaus.org/extra-enforcer-rules/enforceBytecodeVersion.html -->
										<enforceBytecodeVersion>
											<maxJdkVersion>${maven.compiler.source}</maxJdkVersion>
										</enforceBytecodeVersion>
									</rules>
								</configuration>
							</execution>
						</executions>
						<dependencies>
							<dependency>
								<groupId>org.codehaus.mojo</groupId>
								<artifactId>extra-enforcer-rules</artifactId>
								<version>1.7.0</version>
							</dependency>
						</dependencies>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>enforce-project-version-when-release</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<properties>
				<maven.enforcer.pom.version.regex>${release.pom.version.regex}</maven.enforcer.pom.version.regex>
			</properties>
		</profile>
		<profile>
			<id>enforce-project-version-when-github-actions-triggered-by-tag</id>
			<activation>
				<property>
					<!-- https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables -->
					<name>env.GITHUB_REF_TYPE</name>
					<value>tag</value>
				</property>
			</activation>
			<properties>
				<maven.enforcer.pom.version.regex>${release.pom.version.regex}</maven.enforcer.pom.version.regex>
			</properties>
		</profile>

		<profile>
			<id>gen-src</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>gen-api-doc</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<properties>
				<javadoc.default.exclude.packages>
					*.internal:*.internal.*:*.internal.*.*:*.internal.*.*.*:*.internal.*.*.*.*
				</javadoc.default.exclude.packages>
				<!--
					Apache Maven Javadoc Plugin – Configuring links and offlineLinks Parameters
						https://maven.apache.org/plugins/maven-javadoc-plugin/examples/links-configuration.html
					more infos about link setting:
						Links to JSR 305 in Javadoc are broken https://github.com/google/guava/issues/2479
						Fix links to javadoc.io for Maven Javadoc Plugin #2628 https://github.com/google/guava/pull/2628
						Can't link to JDK10 in Javadoc comments https://stackoverflow.com/questions/49457896
					About package-list vs.element-list
						Can't link to JDK10 in Javadoc comments
							https://stackoverflow.com/a/49498219/922688
						Missing javadoc/package-list for release 5.1
							https://github.com/gradle/gradle/issues/8183
							https://github.com/gradle/gradle/commit/5e88351dd456a5252d21f3a7ad25bff1b62a2fd2
					Using the linkoffline Option
						https://docs.oracle.com/en/java/javase/11/javadoc/javadoc-command.html#GUID-51213F2C-6E01-4A03-A82A-17428A258A0F
				-->
				<javadoc.package.list.dir>${maven.multiModuleProjectDirectory}/src/package-list</javadoc.package.list.dir>
				<aggregating.javadoc.title>CompletableFuture-Fu(cffu) ${project.version} API</aggregating.javadoc.title>
			</properties>
			<build>
				<plugins>
					<plugin>
						<!--
							https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html
							https://docs.oracle.com/en/java/javase/11/javadoc/javadoc-command.html
						-->
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<configuration>
							<source>8</source>
							<show>protected</show>
							<quiet>true</quiet>
							<!--
								How to disable Javadoc warnings in Maven Javadoc Plugin? - Stack Overflow
								https://stackoverflow.com/questions/39616344
							-->
							<doclint>all,-missing</doclint>
							<!-- https://maven.apache.org/plugins/maven-javadoc-plugin/examples/exclude-package-names.html -->
							<excludePackageNames>${javadoc.default.exclude.packages}</excludePackageNames>
							<!-- https://maven.apache.org/plugins/maven-javadoc-plugin/javadoc-mojo.html#detectOfflineLinks -->
							<detectOfflineLinks>false</detectOfflineLinks>
							<additionalOptions>
								<!--
									Maven javadoc Search redirects to "/undefined/.." url - Stack Overflow
									https://stackoverflow.com/questions/52326318
								-->
								<additionalOption>-html5</additionalOption>

								<additionalOption>-linkoffline</additionalOption>
								<additionalOption>
									https://www.javadoc.io/doc/com.github.spotbugs/spotbugs-annotations/${spotbugs.annotations.version}/
								</additionalOption>
								<additionalOption>${javadoc.package.list.dir}/spotbugs-annotations/</additionalOption>
								<additionalOption>-linkoffline</additionalOption>
								<additionalOption>
									https://www.javadoc.io/doc/org.jetbrains/annotations/${jetbrains.annotations.version}/
								</additionalOption>
								<additionalOption>${javadoc.package.list.dir}/jetbrains-annotations/</additionalOption>
								<additionalOption>-linkoffline</additionalOption>
								<additionalOption>
									https://www.javadoc.io/doc/com.google.code.findbugs/jsr305/${jsr305.version}/
								</additionalOption>
								<additionalOption>${javadoc.package.list.dir}/jsr305/</additionalOption>
								<additionalOption>-linkoffline</additionalOption>
								<additionalOption>https://docs.oracle.com/en/java/javase/21/docs/api/java.base/</additionalOption>
								<additionalOption>${javadoc.package.list.dir}/java/</additionalOption>
							</additionalOptions>
							<additionalJOptions>
								<additionalJOption>-J-Duser.language=en</additionalJOption>
								<additionalJOption>-J-Duser.country=US</additionalJOption>
							</additionalJOptions>
						</configuration>
						<executions>
							<execution>
								<!--
									Aggregating Javadocs For Multi-Projects
										https://maven.apache.org/plugins/maven-javadoc-plugin/examples/aggregate.html
								-->
								<id>aggregate</id>
								<inherited>false</inherited>
								<goals>
									<goal>aggregate</goal>
								</goals>
								<!-- https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html -->
								<phase>package</phase>
								<configuration>
									<!-- https://maven.apache.org/plugins/maven-javadoc-plugin/aggregate-mojo.html#doctitle -->
									<doctitle>${aggregating.javadoc.title}</doctitle>
									<windowtitle>${aggregating.javadoc.title}</windowtitle>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>gen-sign</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
						<executions>
							<execution>
								<id>sign-artifacts</id>
								<phase>verify</phase>
								<goals>
									<goal>sign</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>lint</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<!--
							https://spotbugs.github.io/
							https://spotbugs.readthedocs.io/en/latest/introduction.html
							https://spotbugs.readthedocs.io/en/latest/maven.html
							https://spotbugs.github.io/spotbugs-maven-plugin/check-mojo.html
								Binds by default to the lifecycle phase: verify.
							Spotbugs support @SuppressWarnings
								https://github.com/spotbugs/spotbugs/issues/737#issuecomment-416118033
							Is it possible for spotbugs to skip kotlin files from pure maven configuration?
								https://stackoverflow.com/questions/55060459
						-->
						<groupId>com.github.spotbugs</groupId>
						<artifactId>spotbugs-maven-plugin</artifactId>
						<executions>
							<execution>
								<phase>verify</phase>
								<goals>
									<goal>check</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<excludeFilterFile>
								${maven.multiModuleProjectDirectory}/src/spotbugs-exclude-filter-file.xml
							</excludeFilterFile>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>gen-git-properties</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<!--
						Maven plugin which includes build-time git repository information into an POJO / *.properties).
						Make your apps tell you which version exactly they were built from! Priceless in large distributed deployments.
							https://github.com/git-commit-id/git-commit-id-maven-plugin
					-->
					<plugin>
						<groupId>io.github.git-commit-id</groupId>
						<artifactId>git-commit-id-maven-plugin</artifactId>
						<executions>
							<execution>
								<id>get-the-git-infos</id>
								<goals>
									<goal>revision</goal>
								</goals>
							</execution>
							<execution>
								<id>validate-the-git-infos</id>
								<goals>
									<goal>validateRevision</goal>
								</goals>
							</execution>
						</executions>
						<configuration>
							<validationProperties>
								<!-- verify that the current repository is not dirty -->
								<validationProperty>
									<name>validating git dirty</name>
									<value>${git.dirty}</value>
									<shouldMatchTo>false</shouldMatchTo>
								</validationProperty>
							</validationProperties>
							<generateGitPropertiesFile>true</generateGitPropertiesFile>
							<generateGitPropertiesFilename>
								${project.build.outputDirectory}/META-INF/scm/${project.groupId}/${project.artifactId}/git.properties
							</generateGitPropertiesFilename>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>gen-code-cov</id>
			<activation>
				<property>
					<!-- https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables -->
					<name>env.CI</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<!--
							for codecov.io
							config example: https://github.com/codecov/example-java
							plugin docs: https://eclemma.org/jacoco/trunk/doc/
						-->
						<groupId>org.jacoco</groupId>
						<artifactId>jacoco-maven-plugin</artifactId>
						<executions>
							<execution>
								<goals>
									<goal>prepare-agent</goal>
								</goals>
								<!-- https://www.eclemma.org/jacoco/trunk/doc/prepare-agent-mojo.html -->
								<configuration>
									<append>true</append>
								</configuration>
							</execution>
							<execution>
								<id>report</id>
								<phase>test</phase>
								<goals>
									<goal>report</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>deploy-settings</id>
			<activation>
				<property>
					<name>performRelease</name>
					<value>true</value>
				</property>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.sonatype.plugins</groupId>
						<artifactId>nexus-staging-maven-plugin</artifactId>
						<version>1.7.0</version>
						<extensions>true</extensions>
						<!--
							In multiply module builds using the deploy-at-end feature, the deployment of all components
							is performed in the last module based on the reactor order. If this property is set to true
							in the last module, all staging deployment for all modules will be skipped.
							so, we'll config nexus deploy after every module's `deploy` phase
							see: https://github.com/sonatype/nexus-maven-plugins/tree/master/staging/maven-plugin#configuring-the-plugin
						-->
						<configuration>
							<serverId>ossrh</serverId>
							<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
							<autoReleaseAfterClose>true</autoReleaseAfterClose>
							<!--
								If you are deploying to Maven Central, it is the Nexus Staging Plugin that is doing the deployment
								instead of the `deploy` plugin, so the configuration of the `deploy` plugin has no effect.
								To make the Nexus deploy plugin skip, set skipNexusStagingDeployMojo in its configuration to true.
								see: https://stackoverflow.com/questions/59552549/preventing-maven-modules-from-being-deployed
							-->
							<skipNexusStagingDeployMojo>${maven.deploy.skip}</skipNexusStagingDeployMojo>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
</project>
