<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>name.didier.david</groupId>
  <artifactId>ndd-maven</artifactId>
  <version>0.5.0</version>

  <packaging>pom</packaging>

  <name>NDD Maven</name>
  <description>Foundations of NDD Maven projects</description>
  <url>https://gitlab.com/${gitlab.project.path}</url>
  <inceptionYear>2014</inceptionYear>

  <modules>
    <module>ndd-maven-quality</module>
    <module>ndd-maven-parent</module>
    <module>ndd-maven-java</module>
  </modules>

  <licenses>
    <license>
      <name>Apache-2.0</name>
      <url>LICENSE.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <organization>
    <name>NDD OSS</name>
    <url>https://gitlab.com/${gitlab.project.namespace.root}/</url>
  </organization>

  <developers>
    <developer>
      <id>ddidier</id>
      <name>David DIDIER</name>
      <email>c_inconnu2@yahoo.fr</email>
      <url>https://gitlab.com/ddidier/</url>
      <organization>David DIDIER</organization>
      <organizationUrl>https://gitlab.com/ddidier/</organizationUrl>
      <roles>
        <role>Architect</role>
        <role>Developer</role>
        <role>Owner</role>
      </roles>
      <timezone>1</timezone>
      <properties/>
    </developer>
  </developers>

  <!--contributors></contributors -->

  <issueManagement>
    <system>GitLab Issues</system>
    <url>https://gitlab.com/${gitlab.project.namespace}/${gitlab.project.path}/-/issues</url>
  </issueManagement>

  <ciManagement>
    <system>GitLab CI</system>
    <url>https://gitlab.com/${gitlab.project.namespace}/${gitlab.project.path}/-/pipelines</url>
  </ciManagement>

  <!-- mailingLists></mailingLists -->

  <scm>
    <connection>scm:git:https://gitlab.com/${gitlab.project.namespace}/${gitlab.project.path}.git</connection>
    <developerConnection>scm:git:https://gitlab.com/${gitlab.project.namespace}/${gitlab.project.path}.git
    </developerConnection>
    <url>https://gitlab.com/${gitlab.project.namespace}/${gitlab.project.path}.git</url>
  </scm>

  <distributionManagement>
    <repository>
      <id>releases.oss.sonatype</id>
      <name>Releases Repository</name>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
    <snapshotRepository>
      <id>snapshots.oss.sonatype</id>
      <name>Snapshots Repository</name>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <site>
      <id>pages.gitlab.com</id>
      <name>GitLab Pages</name>
      <url>
        https://${gitlab.project.namespace.root}.gitlab.io/${gitlab.project.namespace.children}/${gitlab.project.name}
      </url>
    </site>
  </distributionManagement>

  <!-- ============================================================================================ Properties ===== -->

  <properties>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Maven ~~~~~ -->

    <!-- Properties that may be overridden in child projects when necessary -->
    <gitlab.project.name>ndd-maven</gitlab.project.name>
    <gitlab.project.namespace.root>ndd-oss</gitlab.project.namespace.root>
    <gitlab.project.namespace.children>java</gitlab.project.namespace.children>
    <gitlab.project.namespace>${gitlab.project.namespace.root}/${gitlab.project.namespace.children}
    </gitlab.project.namespace>
    <gitlab.project.path>${gitlab.project.namespace}/${gitlab.project.name}</gitlab.project.path>

    <java.version>17</java.version>
    <maven.compiler.release>${java.version}</maven.compiler.release>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <project.build.sourceVersion>${java.version}</project.build.sourceVersion>
    <project.build.targetVersion>${java.version}</project.build.targetVersion>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Maven plugins ~~~~~ -->

    <maven-archetype-plugin.version>3.2.1</maven-archetype-plugin.version>

  </properties>

  <!-- ================================================================================================= Build ===== -->

  <build>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Build > Resources ~~~~~ -->

    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources-filtered</directory>
        <filtering>true</filtering>
      </resource>
    </resources>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Build > PluginManagement ~~~~~ -->

    <pluginManagement>
      <plugins>

        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Official Maven - Core plugins ~~~~~ -->

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.10.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>3.0.0-M2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>3.0.0-M7</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>3.0.0-M1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.12.0</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.doxia</groupId>
              <artifactId>doxia-module-markdown</artifactId>
              <version>1.11.1</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0-M7</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-verifier-plugin</artifactId>
          <version>1.1</version>
        </plugin>

        <!-- ~~~~~~~~~~~~~~~~~~~~~~ Official Maven - Packaging plugins ~~~~~ -->

        <!-- maven-acr-plugin -->
        <!-- maven-ear-plugin -->
        <!-- maven-ejb-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <!-- maven-jlink-plugin -->
        <!-- maven-jmod-plugin -->
        <!-- maven-rar-plugin -->
        <!-- maven-shade-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.2.1</version>
        </plugin>
        <!-- maven-war-plugin -->

        <!-- ~~~~~~~~~~~~~~~~~~~~~~ Official Maven - Reporting plugins ~~~~~ -->

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changelog-plugin</artifactId>
          <version>2.3</version>
        </plugin>
        <!-- maven-changes-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <!-- maven-doap-plugin -->
        <!-- maven-docck-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.4.0</version>
          <configuration>
            <doclint>all,-missing</doclint>
            <quiet>true</quiet>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jdeps-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jxr-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <!-- maven-linkcheck-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <version>3.17.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-report-plugin</artifactId>
          <version>3.0.0-M7</version>
        </plugin>

        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~ Official Maven - Tools plugins ~~~~~ -->

        <!-- maven-antrun-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-archetype-plugin</artifactId>
          <version>${maven-archetype-plugin.version}</version>
          <configuration>
            <ignoreEOLStyle>false</ignoreEOLStyle>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-artifact-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>3.1.0</version>
          <configuration>
            <rules>
              <requireMavenVersion>
                <version>3.6.0</version>
              </requireMavenVersion>
              <requireUpperBoundDeps/>
            </rules>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>3.0.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-help-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jarsigner-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- maven-jdeprscan-plugin -->
        <!-- maven-patch-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pdf-plugin</artifactId>
          <version>1.6.0</version>
        </plugin>
        <!-- maven-plugin-plugin -->
        <!-- maven-release-plugin -->
        <!-- maven-remote-resources-plugin -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.13.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scripting-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-stage-plugin</artifactId>
          <version>1.0</version>
        </plugin>
        <!-- maven-toolchains-plugin -->
        <!-- maven-wrapper-plugin -->

        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Other plugins ~~~~~ -->

        <!-- This unofficial plugin is required here to sign artifacts to be deployed. -->
        <plugin>
          <groupId>org.simplify4u.plugins</groupId>
          <artifactId>sign-maven-plugin</artifactId>
          <version>1.0.1</version>
        </plugin>

        <!-- Required to fix dependencies versions -->
        <plugin>
          <groupId>se.vandmo</groupId>
          <artifactId>dependency-lock-maven-plugin</artifactId>
          <version>0.25</version>
          <configuration>
            <format>pom</format>
          </configuration>
        </plugin>

      </plugins>
    </pluginManagement>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Build > Plugins ~~~~~ -->

    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-constraints</id>
            <goals>
              <goal>enforce</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>se.vandmo</groupId>
        <artifactId>dependency-lock-maven-plugin</artifactId>
        <!-- Always fails with snapshot dependencies (https://github.com/vandmo/dependency-lock-maven-plugin/issues/43). -->
        <!-- Check is made during the CI for the "master" and "release/*" branches, and for tags. -->
      </plugin>

    </plugins>

  </build>

  <!-- ============================================================================================= Reporting ===== -->

  <reporting>
    <plugins>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
      </plugin>

    </plugins>
  </reporting>

  <!-- ============================================================================================== Profiles ===== -->

  <profiles>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NDD.deploy ~~~~~
    This profile MUST BE ACTIVATED on CI when deploying to a Maven repository.
    Use '-Dndd.deploy=true' to activate all 'ndd.deploy' profiles, not their IDs.
    This profile:
    - Sign the generated artifacts to be deployed
    -->
    <profile>
      <id>ndd.deploy.base</id>
      <activation>
        <property>
          <name>ndd.deploy</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.simplify4u.plugins</groupId>
            <artifactId>sign-maven-plugin</artifactId>
            <executions>
              <execution>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>

</project>
