<?xml version="1.0" encoding="UTF-8"?>

<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>org.eclipse.serializer</groupId>
	<artifactId>serializer-parent</artifactId>
	<version>4.0.0</version>
	<packaging>pom</packaging>

	<name>Eclipse Serializer</name>
	<description>Eclipse Serializer Project</description>
	<url>https://projects.eclipse.org/projects/technology.serializer</url>

	<organization>
		<name>MicroStream Software</name>
		<url>https://microstream.one</url>
	</organization>

	<developers>
		<developer>
			<name>MicroStream Software</name>
			<url>https://microstream.one</url>
		</developer>
	</developers>

	<licenses>
		<license>
			<name>Eclipse Public License - v 2.0</name>
			<url>https://www.eclipse.org/legal/epl-2.0/</url>
		</license>
	</licenses>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.release>17</maven.compiler.release>
		<maven.compiler.compilerId>javac</maven.compiler.compilerId>
		<maven.version.minimum>3.8.1</maven.version.minimum>
		<maven.java.version.minimum>17</maven.java.version.minimum>
		<license.inceptionYear>2023</license.inceptionYear>
		<license.licenseName>epl_only_v2</license.licenseName>
		<license.licenceFile>${basedir}/LICENSE</license.licenceFile>
		<api.version>1</api.version>
		<javadoc.failed.on.error>false</javadoc.failed.on.error>
		<failsafe.rerunFailingTestsCount>2</failsafe.rerunFailingTestsCount>
		<surefire.rerunFailingTestsCount>2</surefire.rerunFailingTestsCount>
		<slf4j.version>2.0.17</slf4j.version>
	</properties>

	<modules>
		<module>afs</module>
		<module>base</module>
		<module>codegen</module>
		<module>configuration</module>
		<module>communication</module>
		<module>persistence</module>
		<module>serializer</module>
	</modules>

	<scm>
		<connection>scm:git:git@github.com:eclipse-serializer/serializer.git</connection>
		<developerConnection>scm:git:git@github.com:eclipse-serializer/serializer.git</developerConnection>
		<url>https://github.com/eclipse-serializer</url>
		<tag>HEAD</tag>
	</scm>

	<distributionManagement>
		<snapshotRepository>
			<id>ossrh</id>
			<url>https://central.sonatype.com/repository/maven-snapshots</url>
		</snapshotRepository>
	</distributionManagement>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.slf4j</groupId>
				<artifactId>slf4j-api</artifactId>
				<version>${slf4j.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>license-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-enforcer-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.sonatype.central</groupId>
				<artifactId>central-publishing-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>io.github.cmake-maven-plugin</groupId>
				<artifactId>cmake-maven-plugin</artifactId>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>3.15.0</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-dependency-plugin</artifactId>
					<version>3.10.0</version>
				</plugin>
				<plugin>
					<groupId>io.github.cmake-maven-plugin</groupId>
					<artifactId>cmake-maven-plugin</artifactId>
					<version>4.0.3-b1</version>
				</plugin>
				<plugin>
					<groupId>org.apache.felix</groupId>
					<artifactId>maven-bundle-plugin</artifactId>
					<version>6.0.2</version>
					<extensions>true</extensions>
					<executions>
						<execution>
							<id>bundle-manifest</id>
							<phase>process-classes</phase>
							<goals>
								<goal>manifest</goal>
							</goals>
						</execution>
					</executions>
					<configuration>
						<instructions>
							<Export-Package>org.eclipse.serializer*;-split-package:=merge-first</Export-Package>
							<Import-Package>*</Import-Package>
							<DynamicImport-Package>*</DynamicImport-Package>
						</instructions>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-jar-plugin</artifactId>
					<version>3.5.0</version>
					<configuration>
						<archive>
							<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
							<manifestEntries>
								<built-by>${project.organization.name}</built-by>
							</manifestEntries>
						</archive>
					</configuration>
				</plugin>
				<plugin>
				<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-source-plugin</artifactId>
					<version>3.4.0</version>
					<executions>
						<execution>
							<id>attach-sources</id>
							<goals>
								<goal>jar-no-fork</goal>
							</goals>
							<configuration>
								<archive>
									<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
									<manifestEntries>
										<built-by>${project.organization.name}</built-by>
									</manifestEntries>
								</archive>
							</configuration>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-javadoc-plugin</artifactId>
					<version>3.12.0</version>
					<configuration>
						<doclint>none</doclint>
						<failOnError>${javadoc.failed.on.error}</failOnError>
						<notree>true</notree>
						<source>${maven.compiler.release}</source>
						<doctitle>Eclipse Serializer API</doctitle>
						<windowtitle>Eclipse Serializer API</windowtitle>
						<archive>
							<manifestEntries>
								<built-by>${project.organization.name}</built-by>
							</manifestEntries>
						</archive>
					</configuration>
					<executions>
						<execution>
							<id>attach-javadocs</id>
							<goals>
								<goal>jar</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<groupId>org.codehaus.mojo</groupId>
					<artifactId>license-maven-plugin</artifactId>
					<version>2.4.0</version>
					<configuration>
						<includes>
							<include>**/*.java</include>
						</includes>
						<ignoreNoFileToScan>true</ignoreNoFileToScan>
						<failOnMissingHeader>true</failOnMissingHeader>
					</configuration>
					<executions>
						<execution>
							<id>add-license</id>
							<phase>process-sources</phase>
							<goals>
								<goal>update-file-header</goal>
								<goal>update-project-license</goal>
							</goals>
						</execution>
					</executions>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-gpg-plugin</artifactId>
					<version>3.2.6</version>
					<executions>
						<execution>
							<id>sign-artifacts</id>
							<phase>verify</phase>
							<goals>
								<goal>sign</goal>
							</goals>
						</execution>
					</executions>
					<configuration>
						<!-- Prevent gpg from using pinentry programs -->
						<gpgArguments>
							<arg>--pinentry-mode</arg>
							<arg>loopback</arg>
						</gpgArguments>
						<signer>bc</signer>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-deploy-plugin</artifactId>
					<version>3.1.3</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-enforcer-plugin</artifactId>
					<version>3.5.0</version>
					<executions>
						<execution>
							<id>enforce-env</id>
							<goals>
								<goal>enforce</goal>
							</goals>
							<configuration>
								<rules>
									<requireMavenVersion>
										<version>${maven.version.minimum}</version>
									</requireMavenVersion>
									<requireJavaVersion>
										<version>${maven.java.version.minimum}</version>
									</requireJavaVersion>
								</rules>
								<fail>true</fail>
							</configuration>
						</execution>
					</executions>
				</plugin>
				<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.apache.maven.plugins</groupId>
					<artifactId>maven-install-plugin</artifactId>
					<version>3.1.3</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-site-plugin</artifactId>
					<version>4.0.0-M16</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-shade-plugin</artifactId>
					<version>3.6.0</version>
				</plugin>
				<plugin>
					<groupId>org.sonatype.central</groupId>
					<artifactId>central-publishing-maven-plugin</artifactId>
					<version>0.8.0</version>
					<extensions>true</extensions>
					<configuration>
						<publishingServerId>central</publishingServerId>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<profiles>
		<profile>
			<id>deploy</id>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
					</plugin>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-gpg-plugin</artifactId>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>module-info-check</id>
			<activation>
				<file>
					<exists>src/main/java</exists>
				</file>
			</activation>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-enforcer-plugin</artifactId>
						<executions>
							<execution>
								<id>enforce-files-exist</id>
								<goals>
									<goal>enforce</goal>
								</goals>
								<configuration>
									<rules>
										<requireFilesExist>
											<message>The module-info is not present</message>
											<files>
												<file>${project.basedir}/src/main/java/module-info.java</file>
											</files>
										</requireFilesExist>
									</rules>
									<fail>true</fail>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>javadoc-check</id>
			<properties>
				<javadoc.failed.on.error>true</javadoc.failed.on.error>
			</properties>
			<build>
				<plugins>
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>java24-plus-nativememory</id>
			<activation>
				<!-- activate for JDK 24 and newer -->
				<jdk>[24,)</jdk>
			</activation>
			<modules>
				<module>nativememory</module>
			</modules>
		</profile>

	</profiles>

</project>
