<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>com.holon-platform</groupId>
	<artifactId>parent</artifactId>
	<version>2.0.0</version>

	<packaging>pom</packaging>

	<name>${project.groupId}:${project.artifactId}</name>
	<description>Parent POM for Holon platform projects</description>

	<url>https://holon-platform.com</url>

	<organization>
		<name>The Holon Platform</name>
		<url>https://holon-platform.com</url>
	</organization>

	<licenses>
		<license>
			<name>Apache License Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<developers>
		<developer>
			<name>Holon development team</name>
			<email>dev@holon-platform.com</email>
			<organization>The Holon Platform</organization>
			<organizationUrl>https://holon-platform.com</organizationUrl>
		</developer>
	</developers>

	<issueManagement>
		<url>https://github.com/holon-platform/holon-maven/issues</url>
		<system>GitHub Issues</system>
	</issueManagement>

	<scm>
		<connection>scm:git:https://github.com/holon-platform/holon-maven.git</connection>
		<url>https://github.com/holon-platform/holon-maven</url>
		<developerConnection>
			scm:git:https://github.com/holon-platform/holon-maven.git</developerConnection>
		<tag>2.0.0</tag>
	</scm>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

		<maven.compiler.release>21</maven.compiler.release>

		<!-- Maven plugins -->
		<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
		<maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
		<maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
		<maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
		<maven-source-plugin.version>3.3.1</maven-source-plugin.version>
		<maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
		<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
		<maven-failsafe-plugin.version>3.5.3</maven-failsafe-plugin.version>
		<maven-release-plugin.version>3.1.1</maven-release-plugin.version>
		<maven-gpg-plugin.version>3.2.7</maven-gpg-plugin.version>
		<nexus-staging-maven-plugin.version>1.7.0</nexus-staging-maven-plugin.version>
		<docker-maven-plugin.version>0.46.0</docker-maven-plugin.version>
		<maven-remote-resources-plugin.version>3.3.0</maven-remote-resources-plugin.version>

		<!-- JaCoCo -->
		<jacoco.maven.version>0.8.13</jacoco.maven.version>

		<!-- JUnit -->
		<junit.jupiter.api.version>5.12.2</junit.jupiter.api.version>
		<junit.jupiter.engine.version>5.12.2</junit.jupiter.engine.version>

		<!-- Logger -->
		<logback.version>1.5.18</logback.version>

		<!-- Shared resources -->
		<shared-resources.version>2.0.0</shared-resources.version>

		<!-- Asciidoc -->
		<asciidoctor.maven.plugin.version>3.2.0</asciidoctor.maven.plugin.version>
		<asciidoctorj.pdf.version>2.3.19</asciidoctorj.pdf.version>

		<generated-docs.dir>${project.build.directory}/generated-docs</generated-docs.dir>

		<!-- Git scm server id in settings.xml -->
		<project.scm.id>git-scm-server</project.scm.id>

	</properties>

	<pluginRepositories>
		<pluginRepository>
			<id>central</id>
			<name>Central Repository</name>
			<url>https://repo.maven.apache.org/maven2</url>
			<layout>default</layout>
		</pluginRepository>
	</pluginRepositories>

	<dependencyManagement>
		<dependencies>

			<!-- JUnit -->
			<dependency>
				<groupId>org.junit.jupiter</groupId>
				<artifactId>junit-jupiter-api</artifactId>
				<version>${junit.jupiter.api.version}</version>
				<scope>test</scope>
			</dependency>
			<dependency>
				<groupId>org.junit.jupiter</groupId>
				<artifactId>junit-jupiter-engine</artifactId>
				<version>${junit.jupiter.engine.version}</version>
				<scope>test</scope>
			</dependency>

			<!-- Logback -->
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-classic</artifactId>
				<version>${logback.version}</version>
			</dependency>

		</dependencies>
	</dependencyManagement>

	<build>

		<plugins>

			<!-- Compiler -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven-compiler-plugin.version}</version>
				<configuration>
					<release>${maven.compiler.release}</release>
					<encoding>UTF-8</encoding>
					<compilerArgument>-Xlint:unchecked</compilerArgument>
					<compilerArgs>
						<arg>-parameters</arg>
					</compilerArgs>
					<!-- Spring/Boot upgrade -->
					<parameters>true</parameters>
				</configuration>
			</plugin>

			<!-- JaCoCo -->
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
			</plugin>

			<!-- Import shared resources -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-remote-resources-plugin</artifactId>
				<version>${maven-remote-resources-plugin.version}</version>
				<configuration>
					<resourceBundles>
						<resourceBundle>
							com.holon-platform:holon-shared:${shared-resources.version}</resourceBundle>
					</resourceBundles>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>process</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

		</plugins>

		<!-- Plugin definitions -->

		<pluginManagement>
			<plugins>

				<!-- jar -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-jar-plugin</artifactId>
					<version>${maven-jar-plugin.version}</version>
				</plugin>

				<!-- Sources -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>${maven-source-plugin.version}</version>
				</plugin>

				<!-- Javadoc -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-javadoc-plugin</artifactId>
					<version>${maven-javadoc-plugin.version}</version>
					<configuration>
						<charset>UTF-8</charset>
						<docencoding>UTF-8</docencoding>
						<keywords>true</keywords>
					</configuration>
				</plugin>

				<!-- Enforcer for release -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-enforcer-plugin</artifactId>
					<version>${maven-enforcer-plugin.version}</version>
					<executions>
						<execution>
							<id>enforce-maven</id>
							<goals>
								<goal>enforce</goal>
							</goals>
							<configuration>
								<rules>
									<requireMavenVersion>
										<version>(,2.1.0),(2.1.0,2.2.0),(2.2.0,)</version>
										<message>Maven 2.1.0 and 2.2.0 produce
											incorrect GPG
											signatures and checksums
											respectively.</message>
									</requireMavenVersion>
								</rules>
							</configuration>
						</execution>
					</executions>
				</plugin>

				<!-- Assembly -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-assembly-plugin</artifactId>
					<version>${maven-assembly-plugin.version}</version>
					<dependencies>
						<dependency>
							<groupId>com.holon-platform</groupId>
							<artifactId>holon-shared</artifactId>
							<version>${shared-resources.version}</version>
						</dependency>
					</dependencies>
				</plugin>

				<!-- Asciidoc -->
				<plugin>
					<groupId>org.asciidoctor</groupId>
					<artifactId>asciidoctor-maven-plugin</artifactId>
					<version>${asciidoctor.maven.plugin.version}</version>
					<dependencies>
						<dependency>
							<groupId>org.asciidoctor</groupId>
							<artifactId>asciidoctorj-pdf</artifactId>
							<version>${asciidoctorj.pdf.version}</version>
						</dependency>
					</dependencies>
					<configuration>
						<sourceDirectory>src/docs/asciidoc/reference</sourceDirectory>
						<sourceHighlighter>coderay</sourceHighlighter>
						<attributes>
							<endpoint-url>https://holon-platform.com</endpoint-url>
							<sourcedir>${project.build.sourceDirectory}</sourcedir>
							<project-version>${project.version}</project-version>
							<examplesdir>${project.basedir}/src/main/java</examplesdir>
							<icons>font</icons>
							<idprefix />
							<idseparator>-</idseparator>
							<docinfo1>true</docinfo1>
							<docinfodir>
								${project.build.directory}/maven-shared-archive-resources/documentation</docinfodir>
							<last-update-label>false</last-update-label>
							<theme>flask</theme>
							<tabsize>2</tabsize>
						</attributes>
					</configuration>
					<executions>
						<!-- HTML -->
						<execution>
							<id>asciidoc-to-html</id>
							<phase>package</phase>
							<goals>
								<goal>process-asciidoc</goal>
							</goals>
							<configuration>
								<backend>html5</backend>
								<attributes>
									<sectanchors>true</sectanchors>
									<linkcss>true</linkcss>
								</attributes>
							</configuration>
						</execution>
						<!-- PDF -->
						<execution>
							<id>asciidoc-to-pdf</id>
							<phase>package</phase>
							<goals>
								<goal>process-asciidoc</goal>
							</goals>
							<configuration>
								<backend>pdf</backend>
								<attributes>
									<pagenums />
									<toc />
									<pdf-stylesdir>
										${project.build.directory}/maven-shared-archive-resources/documentation/theme</pdf-stylesdir>
									<pdf-style>holon</pdf-style>
								</attributes>
							</configuration>
						</execution>
					</executions>
				</plugin>

				<!-- Release -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-release-plugin</artifactId>
					<version>${maven-release-plugin.version}</version>
					<configuration>
						<tagNameFormat>@{project.version}</tagNameFormat>
						<autoVersionSubmodules>true</autoVersionSubmodules>
						<useReleaseProfile>false</useReleaseProfile>
					</configuration>
				</plugin>

				<!-- JaCoCo -->
				<plugin>
					<groupId>org.jacoco</groupId>
					<artifactId>jacoco-maven-plugin</artifactId>
					<version>${jacoco.maven.version}</version>
					<executions>
						<execution>
							<id>pre-unit-test</id>
							<goals>
								<goal>prepare-agent</goal>
							</goals>
							<configuration>
								<destFile>
									${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
								<propertyName>surefireArgLine</propertyName>
							</configuration>
						</execution>
						<execution>
							<id>post-unit-test</id>
							<phase>test</phase>
							<goals>
								<goal>report</goal>
							</goals>
							<configuration>
								<dataFile>
									${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
								<outputDirectory>
									${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
							</configuration>
						</execution>
					</executions>
				</plugin>

				<!-- Surfire -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-surefire-plugin</artifactId>
					<version>${maven-surefire-plugin.version}</version>
					<configuration>
						<argLine>${surefireArgLine}</argLine>
					</configuration>
				</plugin>

				<!-- failsafe -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-failsafe-plugin</artifactId>
					<version>${maven-failsafe-plugin.version}</version>
				</plugin>

				<!-- GPG -->
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>${maven-gpg-plugin.version}</version>
					<executions>
						<execution>
							<id>sign-artifacts</id>
							<phase>verify</phase>
							<goals>
								<goal>sign</goal>
							</goals>
						</execution>
					</executions>
				</plugin>

				<!-- Nexus staging -->
				<plugin>
					<groupId>org.sonatype.plugins</groupId>
					<artifactId>nexus-staging-maven-plugin</artifactId>
					<version>${nexus-staging-maven-plugin.version}</version>
					<extensions>true</extensions>
					<configuration>
						<serverId>sonatype-nexus-staging</serverId>
						<nexusUrl>https://oss.sonatype.org/</nexusUrl>
						<autoReleaseAfterClose>true</autoReleaseAfterClose>
						<stagingProgressTimeoutMinutes>10</stagingProgressTimeoutMinutes>
					</configuration>
				</plugin>

				<!-- Docker -->
				<plugin>
					<groupId>io.fabric8</groupId>
					<artifactId>docker-maven-plugin</artifactId>
					<version>${docker-maven-plugin.version}</version>
					<configuration>
						<showLogs>true</showLogs>
					</configuration>
				</plugin>

				<!-- m2e lifecycle ignorings -->
				<plugin>
					<groupId>org.eclipse.m2e</groupId>
					<artifactId>lifecycle-mapping</artifactId>
					<version>1.0.0</version>
					<configuration>
						<lifecycleMappingMetadata>
							<pluginExecutions>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>org.apache.maven.plugins</groupId>
										<artifactId>
											maven-remote-resources-plugin</artifactId>
										<versionRange>[1.0,)</versionRange>
										<goals>
											<goal>process</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore>
										</ignore>
									</action>
								</pluginExecution>
							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>

			</plugins>
		</pluginManagement>

	</build>

	<profiles>

		<!-- Release -->
		<profile>
			<id>release</id>
			<!-- Sonatype Nexus -->
			<distributionManagement>
				<repository>
					<id>sonatype-nexus-staging</id>
					<name>Nexus release repository</name>
					<url>
						https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
				</repository>
			</distributionManagement>
			<build>
				<plugins>
					<!-- Enforcer -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
					</plugin>
					<!-- Sources -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-source-plugin</artifactId>
						<configuration>
							<!-- Only include java files -->
							<includes>
								<include>**/*.java</include>
							</includes>
						</configuration>
						<executions>
							<execution>
								<id>attach-sources</id>
								<goals>
									<goal>jar-no-fork</goal>
								</goals>
							</execution>
						</executions>
					</plugin>
					<!-- Javadocs -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<executions>
							<execution>
								<id>attach-javadocs</id>
								<phase>prepare-package</phase>
								<goals>
									<goal>jar</goal>
								</goals>
								<configuration>
									<quiet>true</quiet>
								</configuration>
							</execution>
						</executions>
					</plugin>
					<!-- Release -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-release-plugin</artifactId>
					</plugin>
					<!-- GPG -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
					</plugin>
					<!-- Nexus release -->
					<plugin>
						<groupId>org.sonatype.plugins</groupId>
						<artifactId>nexus-staging-maven-plugin</artifactId>
					</plugin>
				</plugins>
			</build>
		</profile>

	</profiles>

</project>