<?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>io.github.krm-demo</groupId>
  <artifactId>core-utils</artifactId>
  <version>21.28.001</version>
  <packaging>jar</packaging>

  <name>${project.artifactId}</name>
  <description>Utility-classes to simplify working with core-java API (streams, collections, input-output)</description>
  <url>https://github.com/krm-demo/core-utils</url>

  <organization>
    <name>krm-demo/core-utils</name>
    <url>https://github.com/krm-demo/core-utils</url>
  </organization>

  <licenses>
    <license>
      <name>MIT License</name>
      <url>http://www.opensource.org/licenses/mit-license.php</url>
    </license>
  </licenses>

  <developers>
    <developer>
      <name>Aleksey Kurmanov</name>
      <email>aleksey.kurmanov@gmail.com</email>
      <organization>krm-demo</organization>
      <organizationUrl>https://github.com/krm-demo</organizationUrl>
    </developer>
  </developers>

  <scm>
    <connection>scm:git:git://github.com/krm-demo/core-utils.git</connection>
    <developerConnection>scm:git:git://github.com/krm-demo/core-utils.git</developerConnection>
    <url>https://github.com/krm-demo/core-utils.git</url>
  </scm>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombock.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>${maven.dependency.plugin.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>${maven.release.plugin.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <!--
      TODO: think about getting rid of any compile and runtime  (non-test !!!) dependencies on:
      - lombok (should be excluded if unsused !!!)
      - slf4j+logback (it's definitely in use by Thymeleaf, which has test-scope)
  -->

  <dependencies>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${ch.qos.logback.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${commons-lang.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-text</artifactId>
      <version>${commons-text.version}</version>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>${commons-io.version}</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${com.fasterxml.jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr310</artifactId>
      <version>${com.fasterxml.jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
      <version>${com.fasterxml.jackson.version}</version> <!-- Use the latest stable version -->
    </dependency>
    <dependency>
      <groupId>org.snakeyaml</groupId>
      <artifactId>snakeyaml-engine</artifactId>
      <version>${snakeyaml-engine.version}</version>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>${org.junit.jupiter.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <version>${org.junit.jupiter.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-launcher</artifactId>
      <version>${org.junit.platform.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-reporting</artifactId>
      <version>${org.junit.platform.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.opentest4j.reporting</groupId>
      <artifactId>open-test-reporting-cli</artifactId>
      <version>${open-test-reporting-cli.version}</version>
      <scope>test</scope>
<!--      <classifier>standalone</classifier>-->
<!--      <type>jar</type>-->
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j2-impl</artifactId>
        </exclusion>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>${org.assertj.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
      <version>${org.mockito.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.jgit</groupId>
      <artifactId>org.eclipse.jgit</artifactId>
      <version>7.4.0.202509020913-r</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf</artifactId>
      <version>${org.thymeleaf.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>info.picocli</groupId>
      <artifactId>picocli</artifactId>
      <version>${picocli.version}</version>
    </dependency>

<!--
    <dependency>
      <groupId>org.sonatype.central</groupId>
      <artifactId>central-publishing-maven-plugin</artifactId>
      <version>0.9.0</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>${maven-plugin-api.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven.plugin-tools</groupId>
      <artifactId>maven-plugin-annotations</artifactId>
      <version>${maven-plugin-annotations.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-core</artifactId>
      <version>${maven-core.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-compat</artifactId>
      <version>${maven-comat.version}</version>
      <scope>test</scope>
    </dependency>
  -->

  </dependencies>

  <build>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>${maven.install.plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>${maven.deploy.plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>${maven.gpg.plugin.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <!-- Enforcing using the proper version of maven (see https://maven.apache.org/enforcer) -->
      <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>
              <!-- the goal 'enforce' is bound to maven-phase 'validate' -->
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>${maven-version-to-enforce}</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
          Getting the reports about not up-to-date versions of maven-project's dependencies and plugins:
          - getting help: "mvn versions:help" or see https://www.mojohaus.org/versions/versions-maven-plugin/index.html
          - dependencies-updates     ::> `mvn versions:display-dependency-updates`
          - plugin-updates info      ::> `mvn versions:display-plugin-updates`
          - properties-updates info  ::> `mvn versions:display-property-updates`
      -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>${maven-versions-plugin.version}</version>
        <configuration>
          <ruleSet>
            <ignoreVersions>
              <ignoreVersion>
                <type>regex</type>
                <version>(?i).*-(alpha|beta|m|rc)([-.]?\d+)?</version>
              </ignoreVersion>
            </ignoreVersions>
          </ruleSet>
        </configuration>
      </plugin>

      <!-- Resoling the current, the next and the last released versions of a current maven-project -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>${maven-build-helper-plugin.version}</version>
        <executions>
          <execution>
            <id>parse-version</id>
            <phase>validate</phase>
            <goals>
              <goal>parse-version</goal>
            </goals>
          </execution>
          <execution>
            <id>released-version</id>
            <phase>validate</phase>
            <goals>
              <!-- this goal access the remote repository and has no effect without existing release -->
              <goal>released-version</goal>
            </goals>
          </execution>
<!--
          <execution>
            <id>attach-artifacts</id>
            <goals>
              <goal>attach-artifact</goal>
            </goals>
            <configuration>
              <artifacts>
                <artifact>
                  <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file>
                  <type>jar</type>
                </artifact>
                <artifact>
                  <file>${project.build.directory}/${project.artifactId}-${project.version}-sources.jar</file>
                  <classifier>sources</classifier>
                  <type>jar</type>
                </artifact>
                <artifact>
                  <file>${project.build.directory}/${project.artifactId}-${project.version}-javadoc.jar</file>
                  <classifier>javadoc</classifier>
                  <type>jar</type>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
-->
        </executions>
      </plugin>

      <!-- saving the properties of maven-project into target output-file -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>${maven-properties-plugin.version}</version>
        <executions>
          <execution>
            <phase>generate-resources</phase>
            <goals>
              <goal>write-project-properties</goal>
            </goals>
            <configuration>
              <outputFile>
                ${project.build.outputDirectory}/META-INF/maven/maven-project.properties
              </outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- ??? could be deleted, because it looks like default settings are working fine ??? -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>${maven.resources.plugin.version}</version>
        <configuration>
          <propertiesEncoding>${project.build.sourceEncoding}</propertiesEncoding>
        </configuration>
      </plugin>

      <!-- Compiling the Java-sources (including annotation processing with Lombok) -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <release>${maven.compiler.release}</release>
          <compilerArgs>
            <arg>-Xlint:all,-processing</arg>
          </compilerArgs>
          <annotationProcessorPaths>
            <path>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </path>
          </annotationProcessorPaths>
          <showWarnings>true</showWarnings>
          <debug>${maven-compiler-plugin.debug}</debug>
        </configuration>
      </plugin>

      <!-- Executing regular JUnit-tests (using JUnit-5 Platform) in default build-lifecycle -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven.surefire.plugin.version}</version>
        <configuration>
          <excludedGroups>integration-test</excludedGroups>
          <!-- it's very important to prepend the list of arguments with placeholder @{argLine} for "JaCoCo" !!! -->
          <argLine>
            @{argLine}
            -javaagent:${settings.localRepository}/org/mockito/mockito-core/${org.mockito.version}/mockito-core-${org.mockito.version}.jar
            -Xshare:off
          </argLine>
          <reportFormat>plain</reportFormat>
          <forkCount>1</forkCount>
          <reuseForks>true</reuseForks>
          <systemPropertyVariables>
            <picocli.ansi>true</picocli.ansi>
            <polyglot.engine.WarnInterpreterOnly>false</polyglot.engine.WarnInterpreterOnly>
          </systemPropertyVariables>
          <statelessTestsetReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5Xml30StatelessReporter">
            <disable>false</disable>
            <version>3.0</version>
            <usePhrasedFileName>false</usePhrasedFileName>
            <usePhrasedTestSuiteClassName>true</usePhrasedTestSuiteClassName>
            <usePhrasedTestCaseClassName>true</usePhrasedTestCaseClassName>
            <usePhrasedTestCaseMethodName>true</usePhrasedTestCaseMethodName>
          </statelessTestsetReporter>
          <consoleOutputReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5ConsoleOutputReporter">
            <!-- if enabled the standard output will NOT be suppressed, and undesired garbage could be in console -->
            <disable>false</disable>
            <encoding>UTF-8</encoding>
            <usePhrasedFileName>false</usePhrasedFileName>
          </consoleOutputReporter>
          <statelessTestsetInfoReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoReporter">
            <disable>false</disable>
            <usePhrasedFileName>false</usePhrasedFileName>
            <usePhrasedClassNameInRunning>true</usePhrasedClassNameInRunning>
            <usePhrasedClassNameInTestCaseSummary>true</usePhrasedClassNameInTestCaseSummary>
          </statelessTestsetInfoReporter>
        </configuration>
      </plugin>
      <plugin>
        <!-- old-school "surefire"-report looks useless and deprecated in favor of "Open Test Alliance for the JVM" -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>${maven.surefire.plugin.version}</version>
      </plugin>

      <!--
          Executing integration JUnit-tests (using JUnit-5 Platform) after the default lifecycle (manually).
          Once this plugin is not bound to any phase - it's not correct to execute it right after "clean",
          but normally you must execute it as    ::> `mvn clean test-compile failsafe:integration-test`
      -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>${maven.failsafe.plugin.version}</version>
        <dependencies>
          <dependency>
            <groupId>me.fabriciorby</groupId>
            <artifactId>maven-surefire-junit5-tree-reporter</artifactId>
            <version>${me-fabriciorby-junit5-tree-reporter.version}</version>
          </dependency>
        </dependencies>
        <configuration>
          <groups>integration-test</groups>
          <argLine>
            -javaagent:${settings.localRepository}/org/mockito/mockito-core/${org.mockito.version}/mockito-core-${org.mockito.version}.jar
            -Xshare:off
          </argLine>
          <includes>
            <include>**/Test*.java</include>
            <include>**/*Test.java</include>
            <include>**/*Tests.java</include>
            <include>**/*TestCase.java</include>
          </includes>
          <forkCount>1</forkCount>
          <reuseForks>true</reuseForks>
          <reportFormat>plain</reportFormat>
          <statelessTestsetInfoReporter implementation="org.apache.maven.plugin.surefire.extensions.junit5.JUnit5StatelessTestsetInfoTreeReporter"/>
        </configuration>
      </plugin>

      <!--
          "JaCoCo"-plugin, which is used to collect and report the information about code-coverage.
          In order to verify that "JaCoCo" is properly configured it's recommended to use "buildplan"-plugin:
          - list of plugin executions              ::> `mvn buildplan:list`
          - list of plugin executions by plugin    ::> `mvn buildplan:list-plugin`
          - list of plugin executions by phase     ::> `mvn buildplan:list-phase`
      -->
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>${maven.jacoco.plugin.version}</version>
        <configuration>
          <dataFile>${maven.jacoco.target.exec-data-file}</dataFile>
          <destFile>${maven.jacoco.target.exec-data-file}</destFile>
          <outputDirectory>${maven.jacoco.reports.output.dir}</outputDirectory>
        </configuration>
        <executions>
          <execution>
            <!-- this is very important settings, which track the coverage during execution the JUnit-tests -->
            <id>prepare-agent</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <!--
                this MOJO transforms the previously collected binary-data into HTML-report:
                - executing the "JaCoCo"-report   ::> `mvn jacoco:report`
            -->
            <id>report</id>
            <phase>verify</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <!--
          Executing any main-class for debug-purposes and during the build:
      -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>${maven-exec-plugin.version}</version>
        <!-- following should be provided if "opentest4j" dependency is excluded from project scopes (1): -->
<!--        <dependencies>-->
<!--          <dependency>-->
<!--            <groupId>org.opentest4j.reporting</groupId>-->
<!--            <artifactId>open-test-reporting-cli</artifactId>-->
<!--            <version>${open-test-reporting-cli.version}</version>-->
<!--            <classifier>standalone</classifier>-->
<!--            <type>jar</type>-->
<!--          </dependency>-->
<!--        </dependencies>-->
        <executions>
          <execution>
            <!-- - executing the class "...CoreUtilsMain" ::> "mvn exec:java@core-utils-main" -->
            <id>core-utils-main</id>
            <goals>
              <goal>java</goal>
            </goals>
            <configuration>
              <includeProjectDependencies>true</includeProjectDependencies>
              <includePluginDependencies>false</includePluginDependencies>
              <mainClass>${main-class-name}</mainClass>
            </configuration>
          </execution>
          <execution>
            <!--
              - executing the class "...ThymeleafTool"     ::> `mvn exec:java@th-tool`
              - ... and to provide command line arguments  ::> `mvn exec:java@th-tool -Dexec.args=". . . ."`
            -->
            <id>th-tool</id>
            <goals>
              <goal>java</goal>
            </goals>
            <configuration>
              <includeProjectDependencies>true</includeProjectDependencies>
              <includePluginDependencies>false</includePluginDependencies>
              <classpathScope>test</classpathScope>
              <mainClass>${th-tool-class-name}</mainClass>
            </configuration>
          </execution>
          <!--
              This project generates HTML-reports, which are provided by "Open Test Alliance for the JVM"...
              - the reference to their API is here: https://github.com/ota4j-team/open-test-reporting
              - the input of this tool is JUnit5 XML-report, which is generated automatically with "maven-surefire-plugin" above
                (see the property "junit.platform.reporting.open.xml.enabled=true" in "src/test/resources/junit-platform.properties" file)
              - two MOJOs below allows to get help and generate HTML-report as a single "open-test-report.html" file.
          -->
          <execution>
            <!--
              - print the "help" of OpenTestReporting API    ::> `mvn exec:java@open-test-help`
            -->
            <id>open-test-help</id>
            <goals>
              <goal>java</goal>
            </goals>
            <configuration>
              <!-- following should be provided if "opentest4j" dependency is excluded from project scopes (2): -->
<!--              <executableDependency>-->
<!--                <groupId>org.opentest4j.reporting</groupId>-->
<!--                <artifactId>open-test-reporting-cli</artifactId>-->
<!--              </executableDependency>-->
              <includeProjectDependencies>true</includeProjectDependencies>
              <includePluginDependencies>true</includePluginDependencies>
              <classpathScope>test</classpathScope>
              <mainClass>org.opentest4j.reporting.cli.ReportingCli</mainClass>
              <arguments>
                <argument>help</argument>
              </arguments>
            </configuration>
          </execution>
          <execution>
            <!--
              - generate HTML-report     ::> `mvn exec:java@open-test-html-report`
            -->
            <id>open-test-html-report</id>
            <phase>verify</phase>
            <goals>
              <goal>java</goal>
            </goals>
            <configuration>
              <!-- following should be provided if "opentest4j" dependency is excluded from project scopes (2): -->
              <!--              <executableDependency>-->
              <!--                <groupId>org.opentest4j.reporting</groupId>-->
              <!--                <artifactId>open-test-reporting-cli</artifactId>-->
              <!--              </executableDependency>-->
              <includeProjectDependencies>true</includeProjectDependencies>
              <includePluginDependencies>true</includePluginDependencies>
              <classpathScope>test</classpathScope>
              <mainClass>org.opentest4j.reporting.cli.ReportingCli</mainClass>
              <arguments>
                <argument>html-report</argument>
                <argument>--output</argument>
                <argument>${project.build.directory}/open-test-report.html</argument>
                <argument>${project.build.directory}/open-test-report.xml</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
          Building the JAR-archive of Java-binaries to be deployed as a main project-artifact
      -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>${maven-jar-plugin.version}</version>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>false</addClasspath>
              <addBuildEnvironmentEntries>true</addBuildEnvironmentEntries>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              <mainClass>${main-class-name}</mainClass>
            </manifest>
            <!-- Manifest-Entries, which are specific for CI/CD-server (in this case it's Git-Hub): -->
            <manifestEntries>
              <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
              <Project-Group>${project.groupId}</Project-Group>
              <Project-Org-Url>${project.organization.url}</Project-Org-Url>
              <Project-Url>${project.url}</Project-Url>
              <Env-Path>${env.PATH}</Env-Path>
              <Env-Pwd>${env.PWD}</Env-Pwd>
              <Project-Build-Url>${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}</Project-Build-Url>
              <Project-Commit-Url>${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/commit/${env.GITHUB_SHA}</Project-Commit-Url>
            </manifestEntries>
            <manifestSections>
              <manifestSection>
                <name>git-hub</name>
                <manifestEntries>
                  <Github-Server-Url>${env.GITHUB_SERVER_URL}</Github-Server-Url>
                  <Github-Server-Repository>${env.GITHUB_REPOSITORY}</Github-Server-Repository>
                  <Github-Sha>${env.GITHUB_SHA}</Github-Sha>
                  <Github-Ref>${env.GITHUB_REF}</Github-Ref>
                  <Github-Ref-Name>${env.GITHUB_REF_NAME}</Github-Ref-Name>
                  <Github-Ref-Type>${env.GITHUB_REF_TYPE}</Github-Ref-Type>
                  <Github-Head-Ref>${env.GITHUB_HEAD_REF}</Github-Head-Ref>
                  <Github-Run-Id>${env.GITHUB_RUN_ID}</Github-Run-Id>
                  <Github-Run-Attempt>${env.GITHUB_RUN_ATTEMPT}</Github-Run-Attempt>
                  <Github-Run-Number>${env.GITHUB_RUN_NUMBER}</Github-Run-Number>
                  <Github-Workflow>${env.GITHUB_WORKFLOW}</Github-Workflow>
                  <Github-Workflow-Event>${env.GITHUB_EVENT_NAME}</Github-Workflow-Event>
                  <Github-Workflow-Job>${env.GITHUB_JOB}</Github-Workflow-Job>
                  <Github-Workflow-Ref>${env.GITHUB_WORKFLOW_REF}</Github-Workflow-Ref>
                  <Github-Workflow-Sha>${env.GITHUB_WORKFLOW_SHA}</Github-Workflow-Sha>
                </manifestEntries>
              </manifestSection>
            </manifestSections>
          </archive>
        </configuration>
      </plugin>

      <!--
          Generating the Java-Doc site and zip it into JAR-archive for further release.
          It's a very important part of the build, but it's not bound to any maven-phases,
          because it implies some initial 'th-tool'-based manipulations to be executed before.

          So, in order to generate the standard (deployed to "Maven Central Repository")
          following maven-command should be executed ::>  `mvn javadoc:javadoc`
      -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${maven.javadoc.plugin.version}</version>
        <configuration>
          <debug>true</debug>
          <doclint>none</doclint>
<!--          <nohelp>true</nohelp>-->
<!--          <notree>true</notree>-->
          <notimestamp>true</notimestamp>
          <linksource>true</linksource>
          <release>${maven.javadoc.plugin.release}</release>
          <addStylesheets>
            <addStylesheet>javadoc-core-utils.css</addStylesheet>
          </addStylesheets>
          <docfilessubdirs>true</docfilessubdirs>
          <windowtitle>JavaDoc ${project.name}:${project.version}</windowtitle>
          <doctitle>[(${ jdh.overviewDocTitle })]</doctitle>
          <header>[(${ jdh.navBarRight })]</header>
          <additionalOptions>--snippet-path ${project.basedir}/src/main/java:${project.basedir}/src/test/java</additionalOptions>
        </configuration>
        <executions>
          <execution>
            <id>javadoc</id>
            <goals>
              <goal>javadoc</goal>
            </goals>
            <configuration>
              <show>public</show>
              <bottom>Generated by &lt;b&gt;Apache Maven&lt;/b&gt;'s MOJO &lt;code&gt;javadoc:javadoc@javadoc&lt;/code&gt;</bottom>
            </configuration>
          </execution>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <show>public</show>
              <bottom>Generated by &lt;b&gt;Apache Maven&lt;/b&gt;'s MOJO &lt;code&gt;javadoc:jar@attach-javadocs&lt;/code&gt;</bottom>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!--
          Building the JAR-archive of Java-sources to be deployed as an optional project-artifact
      -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>${maven.source.plugin.version}</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <!-- this declaration is just for to be sure that proper version of "maven-install-plugin" is working -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
      </plugin>
      <plugin>
        <!-- this declaration is just for to be sure that proper version of "maven-deploy-plugin" is working -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
      </plugin>
      <plugin>
        <!-- this declaration is just for to be sure that proper version of "maven-deploy-plugin" is working -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
      </plugin>

      <plugin>
        <!-- this plugin is used to deploy a bundle (zip-file with multiple artifacts) to Maven-Central -->
        <groupId>org.sonatype.central</groupId>
        <artifactId>central-publishing-maven-plugin</artifactId>
        <version>0.9.0</version>
      </plugin>

    </plugins>
  </build>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <java.version>21</java.version>
    <lombock.version>1.18.42</lombock.version>
    <maven.compiler.release>${java.version}</maven.compiler.release>
    <maven-compiler-plugin.debug>true</maven-compiler-plugin.debug>
    <maven-compiler-plugin.version>3.14.1</maven-compiler-plugin.version>

    <main-class-name>org.krmdemo.techlabs.core.CoreUtilsMain</main-class-name>
    <th-tool-class-name>org.krmdemo.techlabs.thtool.ThymeleafTool</th-tool-class-name>

    <org.slf4j.version>2.0.17</org.slf4j.version>
    <ch.qos.logback.version>1.5.21</ch.qos.logback.version>

    <org.thymeleaf.version>3.1.3.RELEASE</org.thymeleaf.version>
    <thymeleaf-layout-dialect.version>3.4.0</thymeleaf-layout-dialect.version>
    <picocli.version>4.7.7</picocli.version>

    <maven-build-helper-plugin.version>3.6.1</maven-build-helper-plugin.version>
    <maven.dependency.plugin.version>3.9.0</maven.dependency.plugin.version>
    <maven.deploy.plugin.version>3.1.4</maven.deploy.plugin.version>
    <maven-enforcer-plugin.version>3.6.2</maven-enforcer-plugin.version>
    <maven-exec-plugin.version>3.6.2</maven-exec-plugin.version>
    <maven.failsafe.plugin.version>3.5.4</maven.failsafe.plugin.version>
    <maven.gpg.plugin.version>3.2.8</maven.gpg.plugin.version>
    <maven.install.plugin.version>3.1.4</maven.install.plugin.version>
    <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
    <maven.javadoc.plugin.version>3.12.0</maven.javadoc.plugin.version>
    <maven.javadoc.plugin.release>${java.version}</maven.javadoc.plugin.release>
    <maven-properties-plugin.version>1.2.1</maven-properties-plugin.version>
    <maven.release.plugin.version>3.2.0</maven.release.plugin.version>
    <maven.resources.plugin.version>3.3.1</maven.resources.plugin.version>
    <maven.source.plugin.version>3.3.1</maven.source.plugin.version>
    <maven.surefire.plugin.version>3.5.4</maven.surefire.plugin.version>
    <maven-versions-plugin.version>2.19.1</maven-versions-plugin.version>

    <maven.version>3.9.11</maven.version>
    <maven-core.version>${maven.version}</maven-core.version>
    <maven-comat.version>${maven.version}</maven-comat.version>
    <maven-plugin-api.version>${maven.version}</maven-plugin-api.version>
    <maven-plugin-annotations.version>3.15.1</maven-plugin-annotations.version>
    <maven-version-to-enforce>[${maven.version},)</maven-version-to-enforce>

    <me-fabriciorby-junit5-tree-reporter.version>1.5.1</me-fabriciorby-junit5-tree-reporter.version>
    <org.junit.jupiter.version>5.13.4</org.junit.jupiter.version>
    <org.junit.platform.version>1.13.4</org.junit.platform.version>
    <org.assertj.version>3.27.6</org.assertj.version>
    <org.mockito.version>5.20.0</org.mockito.version>
    <open-test-reporting-cli.version>0.2.5</open-test-reporting-cli.version>

    <maven.jacoco.plugin.version>0.8.14</maven.jacoco.plugin.version>
    <maven.jacoco.target.exec-data-file>${project.build.directory}/jacoco.exec</maven.jacoco.target.exec-data-file>
    <maven.jacoco.reports.output.dir>${project.build.directory}/jacoco-reports</maven.jacoco.reports.output.dir>

    <commons-io.version>2.20.0</commons-io.version>
    <commons-lang.version>3.19.0</commons-lang.version>
    <commons-text.version>1.14.0</commons-text.version>
    <com.fasterxml.jackson.version>2.20.1</com.fasterxml.jackson.version>
    <snakeyaml-engine.version>2.10</snakeyaml-engine.version>

    <maven-project.group>${project.groupId}</maven-project.group>
    <maven-project.artifact>${project.artifactId}</maven-project.artifact>
    <maven-project.version>${project.version}</maven-project.version>

    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss.SSS'Z'</maven.build.timestamp.format>
    <maven-project.build-date-time>${maven.build.timestamp}</maven-project.build-date-time>
  </properties>

  <distributionManagement>
    <repository>
      <id>github</id>
      <name>GitHub Packages</name>
      <url>https://maven.pkg.github.com/krm-demo/core-utils</url>
    </repository>
  </distributionManagement>

</project>
