<?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>dev.ikm.build</groupId>
  <artifactId>parent</artifactId>
  <version>1.73.0</version>
  <packaging>pom</packaging>
  <name>General Build Parent</name>
  <description>The General Parent that helps to define the build processes that should be used across projects, regardless of.
        Package type. This is versioned and if you want to use a different version of the pom, you can simply change
        the parent version and it will adjust all of the properties being used throughout, as the properties and
        plugins will be inherited by subprojects.</description>
  <url>http://www.ikm.dev</url>
  <inceptionYear>2015</inceptionYear>
  <organization>
    <name>Integrated Knowledge Management</name>
    <url>http://www.ikm.dev</url>
  </organization>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>A business-friendly OSS license</comments>
    </license>
  </licenses>
  <developers>
    <developer>
      <id>ikmdev</id>
      <name>IKM Development Team</name>
      <email>support@ikm.dev</email>
    </developer>
  </developers>
  <scm>
    <url>http://www.github.com/ikmdev/build-parent</url>
  </scm>
  <issueManagement>
    <system>GitHub</system>
    <url>https://github.com/ikmdev/build-parent/issues</url>
  </issueManagement>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>25</java.version>
    <maven.version>4.0</maven.version>
    <maven.clean-plugin.version>3.4.1</maven.clean-plugin.version>
    <maven.plugin-plugin.version>3.15.1</maven.plugin-plugin.version>
    <maven.install-plugin.version>3.1.4</maven.install-plugin.version>
    <maven.deploy-plugin.version>3.1.4</maven.deploy-plugin.version>
    <maven.site.plugin>3.21.0</maven.site.plugin>
    <maven.versions.plugin>2.19.1</maven.versions.plugin>
    <maven.project-info-reports-plugin.version>3.9.0</maven.project-info-reports-plugin.version>
    <maven.dependency-plugin.version>3.9.0</maven.dependency-plugin.version>
    <maven.assembly-plugin.version>3.7.1</maven.assembly-plugin.version>
    <maven.assembly.version>${maven.assembly-plugin.version}</maven.assembly.version>
    <maven.wrapper-plugin.version>3.3.2</maven.wrapper-plugin.version>
    <maven.gpg-plugin.version>3.2.8</maven.gpg-plugin.version>
    <maven.enforcer-plugin.version>3.5.0</maven.enforcer-plugin.version>
    <semver-enforcer-rule.version>0.9.33</semver-enforcer-rule.version>
    <maven.directory.plugin>1.0</maven.directory.plugin>
    <maven-license-plugin.version>4.1</maven-license-plugin.version>
    <maven-mojo-license-plugin.version>2.5.0</maven-mojo-license-plugin.version>
    <maven.changes-plugin.version>2.12.1</maven.changes-plugin.version>
    <maven.sonarqube.version>5.1.0.4751</maven.sonarqube.version>
    <maven.github-flow.version>1.21.1-r11</maven.github-flow.version>
    <sonatype.central.plugin.version>0.9.0</sonatype.central.plugin.version>
    <build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>
    <maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
    <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
    <maven.antrun.plugin>3.1.0</maven.antrun.plugin>
    <maven.jar-plugin.version>3.4.2</maven.jar-plugin.version>
    <sonar.organization>ikmdev</sonar.organization>
    <sonar.host.url>https://sonarcloud.io</sonar.host.url>
  </properties>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>${maven.clean-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>${maven.install-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>${maven.deploy-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>${maven-source-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>${maven.plugin-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.wrapper</groupId>
          <artifactId>maven-wrapper</artifactId>
          <version>${maven.wrapper-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>${maven.gpg-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.commonjava.maven.plugins</groupId>
          <artifactId>directory-maven-plugin</artifactId>
          <version>${maven.directory.plugin}</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>${maven.dependency-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>${maven.assembly-plugin.version}</version>
        </plugin>
        <plugin>
          <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>(3.9,)</version>
                  </requireMavenVersion>
                </rules>
              </configuration>
            </execution>
            <execution>
              <id>enforce-java</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <rules>
                  <requireJavaVersion>
                    <version>${java.version}</version>
                  </requireJavaVersion>
                </rules>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>${maven.versions.plugin}</version>
          <configuration>
            <ruleSet>
              <ignoreVersion>
                <type>regex</type>
                <version>.+-(alpha|beta).+</version>
              </ignoreVersion>
              <ignoreVersion>
                <type>regex</type>
                <version>.+-(M|m).+</version>
              </ignoreVersion>
              <ignoreVersion>
                <type>regex</type>
                <version>.+-(RC|rc).+</version>
              </ignoreVersion>
              <ignoreVersion>
                <type>regex</type>
                <version>(.+-SNAPSHOT|.+-M\d)</version>
              </ignoreVersion>
            </ruleSet>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>license-maven-plugin</artifactId>
          <version>${maven-mojo-license-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-changes-plugin</artifactId>
          <version>${maven.changes-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>${maven.project-info-reports-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>${maven.sonarqube.version}</version>
        </plugin>
        <plugin>
          <groupId>dev.ikm</groupId>
          <artifactId>gitflow-maven-plugin</artifactId>
          <version>${maven.github-flow.version}</version>
          <configuration>
            <featureNamePattern>^(?!(((feature|hotfix|bugfix))\/(IKM|AR|IAT|IC|IKMC|IKDT|IKMD|IIA|IKMW|IKMM|TE)-\d+(-[0-9A-Za-z\-]*)*)|main|prod|master|dev).*$</featureNamePattern>
            <separateFinishBranches>true</separateFinishBranches>
            <versionsMavenPluginVersion>${maven.versions.plugin}</versionsMavenPluginVersion>
            <gitFlowConfig>
              <developmentBranch>main</developmentBranch>
              <productionBranch>main</productionBranch>
              <featureBranchPrefix>feature/</featureBranchPrefix>
              <finishBranchPrefix>finished/</finishBranchPrefix>
              <hotfixBranchPrefix>hotfix/</hotfixBranchPrefix>
              <supportBranchPrefix>support/</supportBranchPrefix>
              <releaseBranchPrefix>release/</releaseBranchPrefix>
            </gitFlowConfig>
            <commitMessages>
              <featureStartMessage>Update version to start feature: @{featureName}</featureStartMessage>
              <featureFinishMessage>Update version to finish feature: @{featureName}</featureFinishMessage>
              <releaseStartMessage>Update release version: @{version}</releaseStartMessage>
              <tagReleaseMessage>Tag release: @{version}</tagReleaseMessage>
              <releaseFinishMessage>Update development version: @{version}</releaseFinishMessage>
            </commitMessages>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.sonatype.central</groupId>
          <artifactId>central-publishing-maven-plugin</artifactId>
          <version>${sonatype.central.plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>${build-helper-maven-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>${maven.antrun.plugin}</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${maven.jar-plugin.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>license-maven-plugin</artifactId>
        <configuration>
          <licenseName>apache_v2</licenseName>
        </configuration>
      </plugin>
      <plugin>
        <groupId>dev.ikm</groupId>
        <artifactId>gitflow-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
              <report>licenses</report>
              <report>modules</report>
              <report>dependency-info</report>
              <report>plugins</report>
              <report>scm</report>
              <report>summary</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
          <dependencyDetailsEnabled>false</dependencyDetailsEnabled>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-jxr-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-plugin-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <reportSets>
          <reportSet>
            <reports>
              <report>dependency-updates-report</report>
              <report>plugin-updates-report</report>
              <report>property-updates-report</report>
            </reports>
          </reportSet>
          <reportSet>
            <id>aggregate</id>
            <reports>
              <report>dependency-updates-aggregate-report</report>
              <report>plugin-updates-aggregate-report</report>
              <report>property-updates-aggregate-report</report>
            </reports>
            <inherited>false</inherited>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  <profiles>
    <profile>
      <id>source-resources-additional-tasks</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/resources</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>jar-resources</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <classesDirectory>${basedir}/src/main/resources</classesDirectory>
                  <classifier>resources</classifier>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>test-resources-additional-tasks</id>
      <activation>
        <file>
          <exists>${basedir}/src/test/resources</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>jar-test-resources</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <classesDirectory>${basedir}/src/test/resources</classesDirectory>
                  <classifier>test-resources</classifier>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>codeQuality</id>
      <activation />
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-no-snapshots</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireReleaseDeps>
                      <message>No Snapshots Allowed!</message>
                      <failWhenParentIsSnapshot>false</failWhenParentIsSnapshot>
                    </requireReleaseDeps>
                  </rules>
                  <fail>false</fail>
                </configuration>
              </execution>
              <execution>
                <id>enforce-no-bad-sections</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <banDistributionManagement />
                    <banDuplicatePomDependencyVersions />
                    <banDynamicVersions>
                      <allowSnapshots>true</allowSnapshots>
                      <allowRelease>false</allowRelease>
                      <allowLatest>false</allowLatest>
                      <allowRanges>false</allowRanges>
                      <excludeOptionals>false</excludeOptionals>
                      <excludedScopes />
                      <ignores />
                    </banDynamicVersions>
                    <requireProperty>
                      <property>project.version</property>
                      <message>"Project version must be a semantic version."</message>
                      <regex>^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$</regex>
                      <regexMessage>"Project version must match the pattern 1.2.3."</regexMessage>
                    </requireProperty>
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
              <execution>
                <id>enforce-maven</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireMavenVersion>
                      <version>(3.9,)</version>
                    </requireMavenVersion>
                  </rules>
                </configuration>
              </execution>
              <execution>
                <id>enforce-java</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireJavaVersion>
                      <version>${java.version}</version>
                    </requireJavaVersion>
                  </rules>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.semver</groupId>
                <artifactId>enforcer-rule</artifactId>
                <version>${semver-enforcer-rule.version}</version>
              </dependency>
            </dependencies>
          </plugin>
          <plugin>
            <groupId>com.github.jlgrock</groupId>
            <artifactId>pom-check-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>validate</phase>
                <goals>
                  <goal>version-check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>signArtifacts</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <gpgArguments>
                <argument>--pinentry-mode</argument>
                <argument>loopback</argument>
                <argument>--yes</argument>
                <argument>--verbose</argument>
              </gpgArguments>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-artifacts</id>
                <phase>deploy</phase>
                <goals>
                  <goal>attach-artifact</goal>
                </goals>
                <configuration>
                  <artifacts>
                    <artifact>
                      <file>${project.build.directory}/*.asc</file>
                      <type>asc</type>
                    </artifact>
                  </artifacts>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>release-enforcement</id>
      <activation />
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>enforce-no-snapshots</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireReleaseDeps>
                      <message>No Snapshots Allowed!</message>
                      <failWhenParentIsSnapshot>true</failWhenParentIsSnapshot>
                    </requireReleaseDeps>
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
              <execution>
                <id>enforce-no-bad-sections</id>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <banDynamicVersions>
                      <allowSnapshots>false</allowSnapshots>
                    </banDynamicVersions>
                  </rules>
                  <fail>true</fail>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>emptySourceJavadocMavenCentralRepository</id>
      <activation>
        <property>
          <name>repositoryIdMavenCentralRepository</name>
          <value>true</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
              <execution>
                <id>javadoc-jar</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <classifier>javadoc</classifier>
                </configuration>
              </execution>
              <execution>
                <id>sources-jar</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <classifier>sources</classifier>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>sourceJavadocMavenCentralRepository</id>
      <activation>
        <property>
          <name>repositoryIdMavenCentralRepository</name>
          <value>true</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>jar</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <doclint>none</doclint>
              <source>${java.version}</source>
              <release>${java.version}</release>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>stageMavenCentralRepository</id>
      <activation>
        <property>
          <name>repositoryIdMavenCentralRepository</name>
          <value>true</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <gpgArguments>
                <argument>--pinentry-mode</argument>
                <argument>loopback</argument>
                <argument>--yes</argument>
                <argument>--verbose</argument>
              </gpgArguments>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.sonatype.central</groupId>
            <artifactId>central-publishing-maven-plugin</artifactId>
            <extensions>true</extensions>
            <executions>
              <execution>
                <id>central-publish</id>
                <phase>deploy</phase>
                <goals>
                  <goal>publish</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <publishingServerId>central</publishingServerId>
              <waitUntil>uploaded</waitUntil>
              <waitMaxTime>14400</waitMaxTime>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>deploy-ike-public</id>
      <activation />
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <distributionManagement>
        <repository>
          <id>ike-public-releases</id>
          <name>IKE Public Releases</name>
          <url>https://nexus.tinkar.org/repository/ike-releases/</url>
        </repository>
        <snapshotRepository>
          <id>ike-public-snapshots</id>
          <name>IKE Public Snapshots</name>
          <url>https://nexus.tinkar.org/repository/ike-snapshots/</url>
        </snapshotRepository>
      </distributionManagement>
    </profile>
    <profile>
      <id>jlink-standard</id>
    </profile>
    <profile>
      <id>create-installer</id>
    </profile>
  </profiles>
</project>