<?xml version="1.0" encoding="UTF-8"?>
<!--
 * SPDX-FileCopyrightText: Copyright (c) 2012-2025 Yegor Bugayenko
 * SPDX-License-Identifier: MIT
-->
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jcabi</groupId>
  <artifactId>parent</artifactId>
  <version>0.69.6</version>
  <packaging>pom</packaging>
  <name>parent</name>
  <description>Parent POM.xml with most commonly used pre-configured features</description>
  <url>https://www.jcabi.com/parent</url>
  <inceptionYear>2012</inceptionYear>
  <organization>
    <name>jcabi.com</name>
    <url>https://www.jcabi.com</url>
  </organization>
  <licenses>
    <license>
      <name>MIT</name>
      <url>https://www.jcabi.com/LICENSE.txt</url>
      <distribution>repo</distribution>
      <comments>MIT License</comments>
    </license>
  </licenses>
  <developers>
    <developer>
      <id>1</id>
      <name>Yegor Bugayenko</name>
      <email>yegor256@gmail.com</email>
      <organization>Zerocracy</organization>
      <organizationUrl>https://www.zerocracy.com</organizationUrl>
      <roles>
        <role>Architect</role>
        <role>Developer</role>
      </roles>
      <timezone>+3</timezone>
    </developer>
  </developers>
  <issueManagement>
    <system>github</system>
    <url>https://github.com/jcabi/jcabi-parent/issues</url>
  </issueManagement>
  <ciManagement>
    <system>travis</system>
    <url>https://travis-ci.org/jcabi/jcabi-parent</url>
  </ciManagement>
  <scm>
    <connection>scm:git:github.com:jcabi/jcabi-parent.git</connection>
    <developerConnection>scm:git:github.com:jcabi/jcabi-parent.git</developerConnection>
    <url>https://github.com/jcabi/jcabi-parent</url>
  </scm>
  <distributionManagement>
    <downloadUrl>https://oss.sonatype.org/content/groups/public</downloadUrl>
    <repository>
      <id>oss.sonatype.org</id>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
    </repository>
    <snapshotRepository>
      <id>oss.sonatype.org</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <site>
      <id>parent.jcabi.com</id>
      <url>https://parent.jcabi.com/</url>
    </site>
  </distributionManagement>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!--
    ISO 8601, see http://en.wikipedia.org/wiki/ISO_8601. This
    property is defined in order to give us an ability to use ${maven.build.timestamp}
    later in the file
    -->
    <maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <skipITs/>
  </properties>
  <repositories>
    <!--
    You should keep it empty in your project.
    @see http://www.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea/
    -->
  </repositories>
  <pluginRepositories>
    <!--
    You should keep it empty in your project.
    @see http://www.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea/
    -->
    <pluginRepository>
      <id>oss.sonatype.org</id>
      <url>https://oss.sonatype.org/content/groups/public</url>
    </pluginRepository>
  </pluginRepositories>
  <profiles>
    <profile>
      <!--
      The profile deploys all artifacts to oss.sonatype.org
      repository (if you're registered there). It also skips
      default deployment plugin.
      @see http://www.jcabi.com/jcabi-parent/profile-sonatype.html
      -->
      <id>sonatype</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <configuration>
                <skip>true</skip>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>jcabi-sources</id>
                <configuration>
                  <forceCreation>true</forceCreation>
                </configuration>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <!--
            Generate -javadoc.jar artifact, required by Maven Central.
            -->
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>jcabi-javadoc</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <additionalOptions>${javadoc.opts}</additionalOptions>
                </configuration>
              </execution>
            </executions>
          </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>
              <autoPublish>true</autoPublish>
              <waitUntil>validated</waitUntil>
              <deploymentName>${project.version}</deploymentName>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Static quality analysis with Qulice and other tools.
      This profile is supposed to be activated in continuous
      integration environment, right before the final approval
      of the build. It runs a number of static code analysis
      tools to validate and approve the quality of source
      code and the SCM repository.
      @see http://www.jcabi.com/jcabi-parent/profile-qulice.html
      -->
      <id>qulice</id>
      <build>
        <plugins>
          <plugin>
            <!--
            Qulice-maven-plugin is a compound static analysis
            tool that aggregates Checkstyle, PMD, FindBugs,
            CodeNarc (for Groovy code) and a few other analyzers.
            Qulice also configures them correctly to enable the
            most important rules.
            @see http://www.qulice.com/qulice-maven-plugin/
            -->
            <groupId>com.qulice</groupId>
            <artifactId>qulice-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>jcabi-qulice-check</id>
                <phase>verify</phase>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Xcop is a static validator of XML formatting.
      @see https://github.com/yegor256/xcop/
      -->
      <id>xcop</id>
      <activation>
        <file>
          <exists>${basedir}/LICENSE.txt</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
              <execution>
                <phase>verify</phase>
                <id>jcabi-xcop</id>
                <configuration>
                  <target>
                    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath"/>
                    <property environment="env"/>
                    <available file="xcop" filepath="${env.PATH}" property="xcop.present"/>
                    <if>
                      <equals arg1="${xcop.present}" arg2="true"/>
                      <then>
                        <patternset id="xcop.main">
                          <include name="**/*.xml"/>
                          <include name="**/*.xsl"/>
                          <include name="**/*.xsd"/>
                          <exclude name="**/target/**/*"/>
                          <exclude name=".idea/**/*"/>
                        </patternset>
                        <condition property="xcop.excludes.defined">
                          <isreference refid="xcop.excludes"/>
                        </condition>
                        <if>
                          <equals arg1="${xcop.excludes.defined}" arg2="true"/>
                          <then>
                            <fileset dir="." id="files">
                              <patternset refid="xcop.main"/>
                              <patternset refid="xcop.excludes"/>
                            </fileset>
                            <pathconvert refid="files" property="converted" pathsep=" "/>
                          </then>
                          <else>
                            <fileset dir="." id="files">
                              <patternset refid="xcop.main"/>
                            </fileset>
                            <pathconvert refid="files" property="converted" pathsep=" "/>
                          </else>
                        </if>
                        <condition property="os.windows">
                          <os family="windows"/>
                        </condition>
                        <if>
                          <equals arg1="${os.windows}" arg2="true"/>
                          <then>
                            <exec executable="cmd" failonerror="true">
                              <arg line="/c xcop"/>
                              <arg value="--license"/>
                              <arg value="LICENSE.txt"/>
                              <arg line="${converted}"/>
                            </exec>
                          </then>
                          <else>
                            <exec executable="xcop" failonerror="true">
                              <arg value="--license"/>
                              <arg value="LICENSE.txt"/>
                              <arg line="${converted}"/>
                            </exec>
                          </else>
                        </if>
                      </then>
                      <else>
                        <echo message="XCOP is not available in PATH"/>
                      </else>
                    </if>
                  </target>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jcabi-doclint-java8-disable</id>
      <activation>
        <jdk>[1.8,)</jdk>
      </activation>
      <properties>
        <javadoc.opts>-Xdoclint:none</javadoc.opts>
      </properties>
    </profile>
    <profile>
      <!--
      The profile builds site for production environment.
      @see https://www.jcabi.com/jcabi-parent/profile-qulice.html
      -->
      <id>site</id>
      <build>
        <plugins>
          <plugin>
            <!--
            Checks the quality of Maven project documentation
            @see http://maven.apache.org/plugins/maven-docck-plugin/index.html
            -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-docck-plugin</artifactId>
            <version>1.2</version>
            <executions>
              <execution>
                <id>jcabi-check</id>
                <!--
                It doesn't work as expected:
                https://jira.codehaus.org/browse/MDOCCK-27
                -->
                <phase>never-verify</phase>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-site-plugin</artifactId>
            <configuration>
              <generateSitemap>true</generateSitemap>
            </configuration>
            <executions>
              <execution>
                <id>jcabi-attach-descriptor</id>
                <goals>
                  <goal>attach-descriptor</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <reporting>
        <plugins>
          <plugin>
            <artifactId>maven-project-info-reports-plugin</artifactId>
            <version>3.9.0</version>
            <configuration>
              <dependencyDetailsEnabled>false</dependencyDetailsEnabled>
              <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
            </configuration>
            <reportSets>
              <reportSet>
                <reports>
                  <report>dependencies</report>
                  <report>index</report>
                  <report>plugins</report>
                  <report>scm</report>
                  <report>summary</report>
                </reports>
              </reportSet>
            </reportSets>
          </plugin>
          <plugin>
            <artifactId>maven-jxr-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
              <aggregate>true</aggregate>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>3.5.3</version>
            <reportSets>
              <reportSet>
                <reports>
                  <report>report-only</report>
                </reports>
              </reportSet>
            </reportSets>
          </plugin>
          <plugin>
            <!--
            Shows reports about recent versions of plugins and deps.
            @see http://mojo.codehaus.org/versions-maven-plugin/
            -->
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.18.0</version>
            <reportSets>
              <reportSet>
                <reports>
                  <report>dependency-updates-report</report>
                  <report>plugin-updates-report</report>
                </reports>
              </reportSet>
            </reportSets>
          </plugin>
          <plugin>
            <!--
            API documentation builder. It will produce documentation
            which is then to be used in site:site. It will be
            located at target/site/apidocs.
            -->
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
              <failOnError>true</failOnError>
              <source>8</source>
              <quiet>true</quiet>
              <links>
                <link>https://docs.oracle.com/en/java/javase/14/docs/api/</link>
              </links>
              <detectLinks>false</detectLinks>
              <detectJavaApiLink>false</detectJavaApiLink>
              <additionalOptions>${javadoc.opts}</additionalOptions>
              <tags>
                <!--
                Here we instruct plugin to use custom tag
                @link http://maven.apache.org/plugins/maven-javadoc-plugin/examples/tag-configuration.html
                -->
                <tag>
                  <name>todo</name>
                  <placement>a</placement>
                  <head>To do:</head>
                </tag>
                <tag>
                  <name>checkstyle</name>
                  <placement>a</placement>
                  <head>Suppressed Checkstyle violations:</head>
                </tag>
              </tags>
            </configuration>
            <reportSets>
              <reportSet>
                <id>jcabi-versioned-html</id>
                <reports>
                  <report>javadoc</report>
                </reports>
                <configuration>
                  <windowtitle>${project.name} ${project.version} API</windowtitle>
                  <doctitle>${project.name} ${project.version} API</doctitle>
                  <sourcepath>src/main/java</sourcepath>
                  <destDir>apidocs-${project.version}</destDir>
                </configuration>
              </reportSet>
              <reportSet>
                <id>jcabi-versioned-test</id>
                <reports>
                  <report>test-javadoc</report>
                </reports>
                <configuration>
                  <testWindowtitle>${project.name} ${project.version} Mock API</testWindowtitle>
                  <testDoctitle>${project.name} ${project.version} Mock API</testDoctitle>
                  <sourcepath>src/mock/java</sourcepath>
                  <destDir>testapidocs-${project.version}</destDir>
                </configuration>
              </reportSet>
            </reportSets>
          </plugin>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-plugin-report-plugin</artifactId>
            <version>3.15.1</version>
          </plugin>
          <plugin>
            <artifactId>maven-plugin-plugin</artifactId>
            <version>3.15.1</version>
          </plugin>
        </plugins>
      </reporting>
    </profile>
    <profile>
      <!--
      Just run it with -Pjacoco and a coverage report will be generated
      in target/site/jacoco/jacoco.xml. Then, you can upload this file
      to codecov.io and enjoy the report.
      -->
      <id>jacoco</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <configuration>
              <output>file</output>
            </configuration>
            <executions>
              <execution>
                <id>jacoco-initialize</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-initialize-integration</id>
                <goals>
                  <goal>prepare-agent-integration</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-report</id>
                <goals>
                  <goal>report</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-report-integration</id>
                <goals>
                  <goal>report-integration</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Enable AOP AspectJ aspects. The profile is activated when you
      have a directory src/main/aspect (even if it's empty). The profile
      will apply all aspects from that folder to your classes and test
      classes, and also will apply com.jcabi:jcabi-aspects. It will
      also add JSR-303 API to the classpath.
      -->
      <id>aspectj</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/aspect</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-aspects</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjrt</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.validation</groupId>
          <artifactId>validation-api</artifactId>
          <scope>compile</scope>
        </dependency>
        <dependency>
          <groupId>org.hibernate.validator</groupId>
          <artifactId>hibernate-validator</artifactId>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>javax.el</groupId>
          <artifactId>javax.el-api</artifactId>
          <scope>provided</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>com.jcabi</groupId>
            <artifactId>jcabi-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>jcabi-ajc-compile</id>
                <phase>process-classes</phase>
                <goals>
                  <goal>ajc</goal>
                </goals>
                <configuration>
                  <tempDirectory>${project.build.directory}/jcabi-ajc</tempDirectory>
                  <classesDirectory>${project.build.outputDirectory}</classesDirectory>
                  <aspectDirectories>
                    <directory>${project.basedir}/src/main/aspect</directory>
                  </aspectDirectories>
                </configuration>
              </execution>
              <execution>
                <id>jcabi-ajc-test-compile</id>
                <phase>process-test-classes</phase>
                <goals>
                  <goal>ajc</goal>
                </goals>
                <configuration>
                  <tempDirectory>${project.build.directory}/jcabi-ajc-test</tempDirectory>
                  <classesDirectory>${project.build.testOutputDirectory}</classesDirectory>
                  <aspectDirectories>
                    <directory>${project.basedir}/src/main/aspect</directory>
                    <directory>${project.basedir}/src/test/aspect</directory>
                  </aspectDirectories>
                  <scopes>
                    <scope>compile</scope>
                    <scope>provided</scope>
                    <scope>system</scope>
                    <scope>runtime</scope>
                    <scope>test</scope>
                  </scopes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Compile Clojure sources from src/main/clojure and src/test/clojure
      directories.
      -->
      <id>clojure</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/clojure</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.theoryinpractise</groupId>
            <artifactId>clojure-maven-plugin</artifactId>
            <version>1.9.3</version>
            <configuration>
              <warnOnReflection>true</warnOnReflection>
              <vmargs>-Dlog4j.configuration=file:${basedir}/src/test/resources/log4j.properties</vmargs>
            </configuration>
            <executions>
              <execution>
                <id>jcabi-clojure</id>
                <goals>
                  <goal>add-source</goal>
                  <goal>add-test-source</goal>
                  <goal>compile</goal>
                  <goal>test</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Compile Groovy sources from src/main/groovy and src/test/groovy
      directories.
      -->
      <id>groovy</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/groovy</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.codehaus.groovy</groupId>
          <artifactId>groovy-all</artifactId>
          <version>3.0.25</version>
          <type>pom</type>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <version>4.2.0</version>
            <configuration>
              <verbose>true</verbose>
            </configuration>
            <executions>
              <execution>
                <id>jcabi-groovy</id>
                <goals>
                  <goal>compile</goal>
                  <goal>compileTests</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      This profile configures site deployment to github pages. See
      http://pages.github.com/
      http://github.github.com/maven-plugins/site-plugin/site-mojo.html
      -->
      <id>gh-pages</id>
      <activation>
        <file>
          <exists>${basedir}/src/site/resources/CNAME</exists>
        </file>
      </activation>
      <properties>
        <github.global.server>github</github.global.server>
      </properties>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-site-plugin</artifactId>
            <configuration>
              <skipDeploy>true</skipDeploy>
            </configuration>
          </plugin>
          <plugin>
            <groupId>com.github.github</groupId>
            <artifactId>site-maven-plugin</artifactId>
            <configuration>
              <message>Site for ${project.version}</message>
              <path>${site.path}</path>
              <merge>true</merge>
            </configuration>
            <executions>
              <execution>
                <phase>site-deploy</phase>
                <goals>
                  <goal>site</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Sign artifacts before installation with GPG. To enable
      this profile you should have "gpg.keyname" property defined.
      -->
      <id>jcabi-gpg</id>
      <activation>
        <property>
          <name>gpg.keyname</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <!--
            To GPG-sign the artifact before deployment to foreign
            repository. GPG keys have to be provided in CI
            environment, and published beforehand.
            @link http://www.sonatype.com/people/2010/01/how-to-generate-pgp-signatures-with-maven/
            -->
            <artifactId>maven-gpg-plugin</artifactId>
            <version>3.2.7</version>
            <executions>
              <execution>
                <id>jcabi-sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
                <configuration>
                  <gpgArguments>
                    <arg>--pinentry-mode</arg>
                    <arg>loopback</arg>
                  </gpgArguments>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Package MOCK artifact. The profile is activated when you have
      a directory "/src/mock/java" available. The profile will create
      and install a new artifact with "mock" classifier, which will
      include all sources from that src/mock/java folder and all
      required resources.
      -->
      <id>jcabi-mock</id>
      <activation>
        <file>
          <exists>${basedir}/src/mock/java</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>3.6.1</version>
            <executions>
              <execution>
                <id>jcabi-add-test-sources</id>
                <phase>validate</phase>
                <goals>
                  <goal>add-test-source</goal>
                </goals>
                <configuration>
                  <sources>
                    <source>${basedir}/src/mock/java</source>
                  </sources>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>jcabi-mock-artifact</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
                <configuration>
                  <classesDirectory>${project.build.testOutputDirectory}</classesDirectory>
                  <archive>
                    <index>true</index>
                    <manifest>
                      <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                    </manifest>
                  </archive>
                  <classifier>mock</classifier>
                  <includes>
                    <include>**/*Mocker.class</include>
                    <include>**/*Mocker$*.class</include>
                  </includes>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Start maven-invoker-plugin when src/it folder is present.
      -->
      <id>jcabi-invoker</id>
      <activation>
        <file>
          <exists>${basedir}/src/it</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-invoker-plugin</artifactId>
            <configuration>
              <skipInvocation>${skipITs}</skipInvocation>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>install</goal>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Generate ANTLR3 grammar. The profile is activated when you have
      a directory src/main/antlr3. It will activate an ANTLR3 compiler and
      add a runtime ANTLR3 dependency.
      -->
      <id>jcabi-antlr3</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/antlr3</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.antlr</groupId>
          <artifactId>antlr-runtime</artifactId>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.antlr</groupId>
            <artifactId>antlr3-maven-plugin</artifactId>
            <version>3.5.3</version>
            <executions>
              <execution>
                <id>jcabi-antlr3</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>antlr</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>jcabi-antlr4</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/antlr4</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.antlr</groupId>
          <artifactId>antlr4-runtime</artifactId>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-maven-plugin</artifactId>
            <!-- Don't forget to change the version of the ANTLR4-RUNTIME too! -->
            <version>4.13.2</version>
            <configuration>
              <sourceDirectory>src/main/antlr4</sourceDirectory>
            </configuration>
            <executions>
              <execution>
                <id>jcabi-antlr4</id>
                <phase>generate-sources</phase>
                <goals>
                  <goal>antlr4</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
      Enable unit testing. The profile is activated when you have
      src/test/java directory in the project. It will add junit, hamcrest,
      and mockito artifacts to the classpath ("test" scope).
      -->
      <id>jcabi-junit</id>
      <activation>
        <file>
          <exists>${basedir}/src/test/java</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-engine</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-params</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-api</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-core</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
    <profile>
      <!--
      Enable LOG4J for testing and SLF4J binding. The profile is activated
      when you have src/test/resources/log4j.properties. When this file
      is present it means that you want your SLF4J logs to be sent to
      LOG4J during testing time. The profile will add required bindings
      to the classpath.
      -->
      <id>jcabi-slf4j</id>
      <activation>
        <file>
          <exists>${basedir}/src/test/resources/log4j.properties</exists>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-reload4j</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
    <profile>
      <!--
      It is a fix for schemagen in JDK7.
      -->
      <id>jcabi-jdk7-fix</id>
      <activation>
        <file>
          <exists>${java.home}/../lib/tools.jar</exists>
        </file>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>com.sun.tools.jxc.maven2</groupId>
              <artifactId>maven-jaxb-schemagen-plugin</artifactId>
              <version>1.2</version>
              <dependencies>
                <dependency>
                  <groupId>com.sun</groupId>
                  <artifactId>tools</artifactId>
                  <version>1.7</version>
                  <scope>system</scope>
                  <systemPath>${java.home}/../lib/tools.jar</systemPath>
                </dependency>
              </dependencies>
            </plugin>
            <plugin>
              <artifactId>maven-plugin-plugin</artifactId>
              <dependencies>
                <dependency>
                  <groupId>com.sun</groupId>
                  <artifactId>tools</artifactId>
                  <version>1.7</version>
                  <scope>system</scope>
                  <systemPath>${java.home}/../lib/tools.jar</systemPath>
                </dependency>
              </dependencies>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
    <profile>
      <!--
      For every Java package it creates a VERSION.txt file in
      "src/main/resources" directory. This is done in order to help
      with identification of currently used version of a package.
      -->
      <id>jcabi-versionalize-packages</id>
      <activation>
        <file>
          <exists>${basedir}/src/main/java</exists>
        </file>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.jcabi</groupId>
            <artifactId>jcabi-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>jcabi-versionalize-packages</id>
                <goals>
                  <goal>versionalize</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <!--
        Aether wrapper.
        @see http://aether.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-aether</artifactId>
        <version>0.10.1</version>
      </dependency>
      <dependency>
        <!--
        AOP Aspects.
        @see http://aspects.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-aspects</artifactId>
        <version>0.26.0</version>
      </dependency>
      <dependency>
        <!--
        AWS DynamoDB object layer.
        @see http://dynamo.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-dynamo</artifactId>
        <version>0.22.4</version>
      </dependency>
      <dependency>
        <!--
        Email sending SDK.
        @see http://email.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-email</artifactId>
        <version>1.12</version>
      </dependency>
      <dependency>
        <!--
        Github API.
        @see http://github.jcabi.com
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-github</artifactId>
        <version>1.9.1</version>
      </dependency>
      <dependency>
        <!--
        HTTP client.
        @see http://http.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-http</artifactId>
        <version>2.0.0</version>
      </dependency>
      <dependency>
        <!--
        Immutable collections.
        @see http://immutable.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-immutable</artifactId>
        <version>1.5</version>
      </dependency>
      <dependency>
        <!--
        JDBC wrapper.
        @see http://jdbc.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-jdbc</artifactId>
        <version>0.19.0</version>
      </dependency>
      <dependency>
        <!--
        Logging facility.
        @see http://log.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-log</artifactId>
        <version>0.24.3</version>
      </dependency>
      <dependency>
        <!--
        Reader of META-INF/MANIFEST.MF files
        @see http://manifests.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-manifests</artifactId>
        <version>2.1.0</version>
      </dependency>
      <dependency>
        <!--
        XHTML Hamcrest matchers.
        @see http://matchers.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-matchers</artifactId>
        <version>1.8.0</version>
      </dependency>
      <dependency>
        <!--
        Maven to SLF4J binding.
        @see http://slf4j.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-maven-slf4j</artifactId>
        <version>0.12.2</version>
      </dependency>
      <dependency>
        <!--
        Odesk SDK.
        @see http://odesk.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-odesk</artifactId>
        <version>0.12</version>
      </dependency>
      <dependency>
        <!--
        Amazon S3 adapter.
        @see http://s3.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-s3</artifactId>
        <version>0.19.0</version>
      </dependency>
      <dependency>
        <!--
        AWS SimpleDB object layer.
        @see http://simpledb.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-simpledb</artifactId>
        <version>0.4.0</version>
      </dependency>
      <dependency>
        <!--
        SSH client.
        @see http://ssh.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-ssh</artifactId>
        <version>1.9.0</version>
      </dependency>
      <dependency>
        <!--
        URN.
        @see http://urn.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-urn</artifactId>
        <version>0.10.0</version>
      </dependency>
      <dependency>
        <!--
        Velocity wrapper.
        @see http://velocity.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-velocity</artifactId>
        <version>0.10.0</version>
      </dependency>
      <dependency>
        <!--
        W3C adapters.
        @see http://w3c.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-w3c</artifactId>
        <version>1.4.0</version>
      </dependency>
      <dependency>
        <!--
        XML parsing and printing.
        @see http://xml.jcabi.com/
        -->
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-xml</artifactId>
        <version>0.35.0</version>
      </dependency>
      <dependency>
        <!-- JSON API -->
        <groupId>jakarta.json</groupId>
        <artifactId>jakarta.json-api</artifactId>
        <version>2.1.3</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- JSON API -->
        <!--
        ~ @todo #1307:15m/DEV Should be removed after updating
        ~  all dependent projects to jakarta namespace.
        ~  The following packages should also be removed:
        ~  org.glassfish:javax.json
        ~  javax.ws.rs:jsr311-api
        ~  javax.xml.bind:jaxb-api
        ~  javax.servlet:javax.servlet-api
        -->
        <groupId>javax.json</groupId>
        <artifactId>javax.json-api</artifactId>
        <version>1.1.4</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- JSON reference implementation -->
        <groupId>org.eclipse.parsson</groupId>
        <artifactId>jakarta.json</artifactId>
        <version>1.1.7</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <!-- JSON reference implementation -->
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.1.4</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <!-- JSR-311 JAX-RS API -->
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- JSR-311 JAX-RS API -->
        <groupId>javax.ws.rs</groupId>
        <artifactId>jsr311-api</artifactId>
        <version>1.1.1</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- JAXB API -->
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>4.0.2</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- JAXB API -->
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.4.0-b180830.0359</version>
        <exclusions>
          <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jsr173_api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <!--
        Google Guava
        @see https://code.google.com/p/guava-libraries/
        -->
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>33.4.8-jre</version>
      </dependency>
      <dependency>
        <!--
        Commons Lang3
        @see http://commons.apache.org/lang/
        -->
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.17.0</version>
      </dependency>
      <dependency>
        <!--
        Commons Text
        @see http://commons.apache.org/text/
        -->
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-text</artifactId>
        <version>1.13.1</version>
      </dependency>
      <dependency>
        <!--
        Commons Collections
        @see https://commons.apache.org/proper/commons-collections/
        -->
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.5.0</version>
      </dependency>
      <dependency>
        <!--
        Commons Math3
        @see http://commons.apache.org/proper/commons-math/
        -->
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>3.6.1</version>
      </dependency>
      <dependency>
        <!--
        Base64 and other codecs
        @see http://commons.apache.org/codec/
        -->
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.18.0</version>
      </dependency>
      <dependency>
        <!--
        Net utils.
        @see http://commons.apache.org/net/
        -->
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.11.1</version>
      </dependency>
      <dependency>
        <!--
        For file/stream manipulations
        @see http://commons.apache.org/io/
        -->
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.19.0</version>
      </dependency>
      <dependency>
        <!--
        Runtime component of AspectJ.
        -->
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.9.24</version>
      </dependency>
      <dependency>
        <!--
        JSR-303 Vaidation API.
        -->
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
      </dependency>
      <dependency>
        <!--
        JSR-303 implementation by Hibernate.
        -->
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>9.0.1.Final</version>
      </dependency>
      <dependency>
        <!-- Required for Hibernate validator -->
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.1-b06</version>
      </dependency>
      <dependency>
        <!-- Required for Hibernate validator, in runtime -->
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>3.0.1-b12</version>
      </dependency>
      <dependency>
        <!-- Clojure -->
        <groupId>org.clojure</groupId>
        <artifactId>clojure</artifactId>
        <version>1.12.1</version>
      </dependency>
      <dependency>
        <!-- Clojure -->
        <groupId>org.clojure</groupId>
        <artifactId>clojure-contrib</artifactId>
        <version>1.2.0</version>
      </dependency>
      <dependency>
        <!-- Clojure -->
        <groupId>org.clojure</groupId>
        <artifactId>tools.logging</artifactId>
        <version>1.3.0</version>
      </dependency>
      <dependency>
        <!-- Servlet API -->
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.1.0</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- Servlet API -->
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!--
        Compile-time annotations.
        @see http://projectlombok.org/features/index.html
        -->
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.38</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <!-- XML APIs. -->
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>1.4.01</version>
      </dependency>
      <dependency>
        <!--
        We are using JUnit framework for unit test organization
        and management. This framework is the most stable and mature
        in the market. Other options considered: TestNG.
        @link http://www.junit.org/
        -->
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>5.13.2</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <!--
        Assertions and matchers for unit tests.
        @link http://code.google.com/p/hamcrest/wiki/Tutorial
        -->
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>3.0</version>
      </dependency>
      <dependency>
        <!--
        Mockito is used as a mocking library during testing.
        Other options: jMock.
        @link http://www.mockito.org/
        -->
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>5.18.0</version>
      </dependency>
      <dependency>
        <!-- Forward all SLF4J calls to LOG4J. -->
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-reload4j</artifactId>
        <version>2.0.17</version>
      </dependency>
      <dependency>
        <!-- Use LOG4J logging facility for all loggings. -->
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
      </dependency>
      <dependency>
        <!--
        ANTLR3 Parser/Lexer
        @link http://www.antlr.org/
        -->
        <groupId>org.antlr</groupId>
        <artifactId>antlr-runtime</artifactId>
        <version>3.5.3</version>
      </dependency>
      <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <!-- Don't forget to change the version of the ANTLR4-MAVEN-PLUGIN too! -->
        <version>4.13.2</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <resources>
      <!--
      Filter resources in "process-resources" phase
      @link http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
      -->
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <testResources>
      <!--
      Filter resources in "process-resources" phase
      @link http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
      -->
      <testResource>
        <directory>${basedir}/src/test/resources</directory>
        <filtering>true</filtering>
      </testResource>
    </testResources>
    <extensions>
      <extension>
        <!--
        This extension enables deployment of artifacts to
        Amazon S3 repository.
        -->
        <groupId>org.kuali.maven.wagons</groupId>
        <artifactId>maven-s3-wagon</artifactId>
        <version>1.2.1</version>
      </extension>
    </extensions>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <version>3.5.0</version>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>[3.2.5,)</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <!--
        This plugin will collect current build number
        from Git and save it into Maven property
        -->
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>3.2.1</version>
        <executions>
          <execution>
            <id>jcabi-build-number</id>
            <phase>initialize</phase>
            <goals>
              <goal>create</goal>
              <goal>create-timestamp</goal>
            </goals>
            <configuration>
              <buildNumberPropertyName>buildNumber</buildNumberPropertyName>
              <timestampPropertyName>timestamp</timestampPropertyName>
              <timestampFormat>yyyy-MM-dd'T'HH:mm:ss</timestampFormat>
              <doCheck>false</doCheck>
              <doUpdate>false</doUpdate>
              <getRevisionOnlyOnce>true</getRevisionOnlyOnce>
              <shortRevisionLength>7</shortRevisionLength>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-maven-plugin</artifactId>
          <version>0.17.0</version>
        </plugin>
        <plugin>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-mysql-maven-plugin</artifactId>
          <version>0.10.2</version>
        </plugin>
        <plugin>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-dynamodb-maven-plugin</artifactId>
          <version>0.10.1</version>
        </plugin>
        <plugin>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-ssl-maven-plugin</artifactId>
          <version>0.14.0</version>
        </plugin>
        <plugin>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-heroku-maven-plugin</artifactId>
          <version>0.9</version>
        </plugin>
        <plugin>
          <groupId>com.jcabi</groupId>
          <artifactId>jcabi-beanstalk-maven-plugin</artifactId>
          <version>0.11</version>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>3.1.0</version>
          <dependencies>
            <dependency>
              <groupId>ant-contrib</groupId>
              <artifactId>ant-contrib</artifactId>
              <version>20020829</version>
              <exclusions>
                <exclusion>
                  <groupId>ant</groupId>
                  <artifactId>ant</artifactId>
                </exclusion>
              </exclusions>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.5.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.14.0</version>
          <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
            <showWarnings>true</showWarnings>
            <failOnWarning>true</failOnWarning>
            <showDeprecation>true</showDeprecation>
            <compilerArgs>
              <arg>-Xlint</arg>
              <arg>-Xlint:-path</arg>
              <!-- @see https://stackoverflow.com/questions/6770455 -->
              <arg>-Xpkginfo:always</arg>
              <!-- @see https://stackoverflow.com/questions/44675503/why-safevarargs-doesnt-suppress-the-warning -->
              <arg>-Xlint:-varargs</arg>
              <!-- @see https://blogs.oracle.com/darcy/entry/bootclasspath_older_source -->
              <arg>-Xlint:-options</arg>
              <!-- @see http://netbeans.org/bugzilla/show_bug.cgi?format=multiple&id=208666 -->
              <!-- this is to avoid a problem with ANTLR and JDK7 -->
              <arg>-Xlint:-classfile</arg>
              <!-- ignore APT warnings -->
              <arg>-Xlint:-processing</arg>
            </compilerArgs>
            <testExcludes>
              <exclude>**/package-info.java</exclude>
            </testExcludes>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.8.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>3.1.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>3.5.3</version>
          <configuration>
            <encoding>${project.build.sourceEncoding}</encoding>
            <failIfNoSpecifiedTests>false</failIfNoSpecifiedTests>
            <forkCount>0</forkCount>
            <parallel>all</parallel>
            <parallelTestsTimeoutForcedInSeconds>0</parallelTestsTimeoutForcedInSeconds>
            <parallelTestsTimeoutInSeconds>0</parallelTestsTimeoutInSeconds>
            <perCoreThreadCount>true</perCoreThreadCount>
            <runOrder>random</runOrder>
            <threadCount>8</threadCount>
            <trimStackTrace>false</trimStackTrace>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-help-plugin</artifactId>
          <version>3.5.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>3.1.4</version>
        </plugin>
        <plugin>
          <artifactId>maven-invoker-plugin</artifactId>
          <version>3.9.1</version>
          <configuration>
            <mergeUserSettings>true</mergeUserSettings>
            <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
            <debug>false</debug>
            <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
            <noLog>false</noLog>
            <postBuildHookScript>verify</postBuildHookScript>
            <preBuildHookScript>setup</preBuildHookScript>
            <projectsDirectory>src/it</projectsDirectory>
            <settingsFile>${basedir}/src/it/settings.xml</settingsFile>
            <showErrors>true</showErrors>
            <showVersion>false</showVersion>
            <streamLogs>false</streamLogs>
            <streamLogsOnFailures>true</streamLogsOnFailures>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.4.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.11.2</version>
          <configuration>
            <source>8</source>
            <tags>
              <tag>
                <name>todo</name>
                <placement>X</placement>
              </tag>
              <tag>
                <name>checkstyle</name>
                <placement>X</placement>
              </tag>
            </tags>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-plugin-plugin</artifactId>
          <version>3.15.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.21.0</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.maven.doxia</groupId>
              <artifactId>doxia-module-markdown</artifactId>
              <version>2.0.0</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        <plugin>
          <!--
          Starts unit tests, protocols their results and creates
          a summary report. It is required to send testing protocol
          to the STDOUT as well, not only to the file.
          -->
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.5.3</version>
          <configuration>
            <useFile>false</useFile>
            <runOrder>random</runOrder>
            <trimStackTrace>false</trimStackTrace>
            <failIfNoTests>true</failIfNoTests>
            <failIfNoSpecifiedTests>true</failIfNoSpecifiedTests>
            <parallel>all</parallel>
            <parallelTestsTimeoutInSeconds>0</parallelTestsTimeoutInSeconds>
            <parallelTestsTimeoutForcedInSeconds>0</parallelTestsTimeoutForcedInSeconds>
            <perCoreThreadCount>true</perCoreThreadCount>
            <threadCount>4</threadCount>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.4.0</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>2.18.0</version>
          <configuration>
            <generateBackupPoms>false</generateBackupPoms>
          </configuration>
        </plugin>
        <plugin>
          <groupId>com.github.github</groupId>
          <artifactId>site-maven-plugin</artifactId>
          <version>0.12</version>
        </plugin>
        <plugin>
          <groupId>com.qulice</groupId>
          <artifactId>qulice-maven-plugin</artifactId>
          <version>0.24.0</version>
          <configuration>
            <excludes>
              <exclude>xml:.*</exclude>
            </excludes>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.13</version>
        </plugin>
        <plugin>
          <groupId>org.eluder.coveralls</groupId>
          <artifactId>coveralls-maven-plugin</artifactId>
          <version>4.3.0</version>
          <configuration>
            <timestampFormat>yyyy-MM-dd'T'HH:mm:ss</timestampFormat>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <reporting>
    <!--
    Rudimentary section, for Maven 2.0 plugins mostly.
    -->
    <excludeDefaults/>
  </reporting>
</project>
