<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2019-2019 Gryphon Zone
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<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>zone.gryphon</groupId>
    <artifactId>base-pom</artifactId>
    <version>0.20.60-fc11f38</version>
    <packaging>pom</packaging>

    <name>${project.artifactId}</name>
    <description>Base POM for Gryphon Zone projects</description>

    <url>https://github.com/gryphon-zone/core-poms</url>

    <inceptionYear>2019</inceptionYear>

    <organization>
        <name>Gryphon Zone</name>
        <url>https://gryphon.zone</url>
    </organization>

    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

    <developers>
        <developer>
            <id>tyrol</id>
            <name>Tyrol</name>
            <email>tyrol@gryphon.zone</email>
            <organizationUrl>https://github.com/gryphon-zone</organizationUrl>
            <roles>
                <role>developer</role>
            </roles>
            <timezone>-6</timezone>
        </developer>
    </developers>

    <scm>
        <?SORTPOM IGNORE?>
        <tag>core-poms-0.20.60-fc11f38</tag>
        <url>https://github.com/gryphon-zone/core-poms</url>
        <connection>scm:git:git@github.com:gryphon-zone/core-poms.git</connection>
        <developerConnection>scm:git:git@github.com:gryphon-zone/core-poms.git</developerConnection>
        <?SORTPOM RESUME?>
    </scm>

    <distributionManagement>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <site>
            <!-- setup site which publishes into the "docs/" folder of the project, for use with github pages -->
            <id>github-pages</id>
            <url>file://docs</url>
        </site>
    </distributionManagement>

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

        <!-- property will be automatically updated during a maven release and can be used by -->
        <!-- child projects to refer to the version of the core POMs being pulled in.         -->
        <core-poms.version>0.20.60-fc11f38</core-poms.version>
        <base-pom.version>${core-poms.version}</base-pom.version>
        <base-bom.version>${core-poms.version}</base-bom.version>

        <!-- minimum required Maven version -->
        <maven.version.minimum>3.3.9</maven.version.minimum>

        <!-- Compilation settings -->
        <java.version.major>1</java.version.major>
        <java.version.minor>8</java.version.minor>
        <java.version>${java.version.major}.${java.version.minor}</java.version>

        <!-- `release` option wasn't added to `javac` until Java 9 -->
        <jdk.version.rule>[1.9,)</jdk.version.rule>

        <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html -->
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.release>${java.version.minor}</maven.compiler.release>
        <maven.compiler.showWarnings>true</maven.compiler.showWarnings>
        <maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>

        <!-- dependency analyzer settings -->
        <dependency.fail.on.warnings>true</dependency.fail.on.warnings>

        <!-- javadoc plugin settings -->
        <javadoc.quiet>true</javadoc.quiet>
        <javadoc.failOnError>false</javadoc.failOnError>

        <!-- release plugin settings -->
        <release.profiles>release</release.profiles>

        <!-- skip site deploy by default -->
        <maven.site.deploy.skip>true</maven.site.deploy.skip>

        <!-- pom sort settings -->
        <sortpom.skip>false</sortpom.skip>
        <sortpom.profile>recommended_2008_06</sortpom.profile>

        <!-- display dependency update settings -->
        <displayUpdates.processPluginDependenciesInPluginManagement>true</displayUpdates.processPluginDependenciesInPluginManagement>
        <displayUpdates.processDependencyManagement>false</displayUpdates.processDependencyManagement>
        <displayUpdates.processPluginDependencies>true</displayUpdates.processPluginDependencies>
        <displayUpdates.processDependencies>true</displayUpdates.processDependencies>
        <displayUpdates.rulesUri>classpath:///zone/gryphon/maven/maven-version-comparison-rules.xml</displayUpdates.rulesUri>

        <!-- pedantic POM settings -->
        <pedantic-pom-enforcers.version>1.3.2</pedantic-pom-enforcers.version>

        <!-- define hardcoded values in "default" settings so that sub-poms can easily add to the list without starting from scratch  -->
        <!-- e.g. child POMs can do:                                                                                                  -->
        <!-- <pedantic.testScopedDependencies>${pedantic.defaultTestScopedDependencies},com.foo:bar</pedantic.testScopedDependencies> -->
        <!-- to add to the list without needing to re-declare all of the defaults. It also allows them to access the default values,  -->
        <!-- even if they've overridden what the dependency plugin is using.                                                          -->

        <pedantic.dependencies.compile.default />
        <pedantic.dependencies.test.default>org.junit:junit,org.assertj:assertj-core,org.mockito:mockito-all</pedantic.dependencies.test.default>
        <pedantic.dependencies.runtime.default />
        <pedantic.dependencies.provided.default>org.projectlombok:lombok</pedantic.dependencies.provided.default>
        <pedantic.dependencies.system.default />
        <pedantic.dependencies.import.default>zone.gryphon:base-bom</pedantic.dependencies.import.default>

        <pedantic.dependencies.compile>${pedantic.dependencies.compile.default}</pedantic.dependencies.compile>
        <pedantic.dependencies.test>${pedantic.dependencies.test.default}</pedantic.dependencies.test>
        <pedantic.dependencies.runtime>${pedantic.dependencies.runtime.default}</pedantic.dependencies.runtime>
        <pedantic.dependencies.provided>${pedantic.dependencies.provided.default}</pedantic.dependencies.provided>
        <pedantic.dependencies.system>${pedantic.dependencies.system.default}</pedantic.dependencies.system>
        <pedantic.dependencies.import>${pedantic.dependencies.import.default}</pedantic.dependencies.import>

        <!-- plugin versions -->
        <maven-plugin.build-helper.version>3.0.0</maven-plugin.build-helper.version>
        <maven-plugin.clean.version>3.1.0</maven-plugin.clean.version>
        <maven-plugin.compiler.version>3.8.1</maven-plugin.compiler.version>
        <maven-plugin.dependency.version>3.1.1</maven-plugin.dependency.version>
        <maven-plugin.deploy.version>3.0.0-M1</maven-plugin.deploy.version>
        <maven-plugin.enforcer.version>3.0.0-M2</maven-plugin.enforcer.version>
        <maven-plugin.exec.version>1.6.0</maven-plugin.exec.version>
        <maven-plugin.gpg.version>1.6</maven-plugin.gpg.version>
        <maven-plugin.install.version>3.0.0-M1</maven-plugin.install.version>
        <maven-plugin.jacoco.version>0.8.4</maven-plugin.jacoco.version>
        <maven-plugin.jar.version>3.1.2</maven-plugin.jar.version>
        <maven-plugin.javadoc.version>3.1.1</maven-plugin.javadoc.version>
        <maven-plugin.nexus-staging.version>1.6.8</maven-plugin.nexus-staging.version>
        <maven-plugin.plugin.version>3.6.0</maven-plugin.plugin.version>
        <maven-plugin.project-info-reports.version>3.0.0</maven-plugin.project-info-reports.version>
        <maven-plugin.release.version>2.5.3</maven-plugin.release.version>
        <maven-plugin.resources.version>3.1.0</maven-plugin.resources.version>
        <maven-plugin.shade.version>3.2.1</maven-plugin.shade.version>
        <maven-plugin.site.version>3.8.2</maven-plugin.site.version>
        <maven-plugin.sortpom.version>2.10.0</maven-plugin.sortpom.version>
        <maven-plugin.source.version>3.1.0</maven-plugin.source.version>
        <maven-plugin.surefire.version>3.0.0-M3</maven-plugin.surefire.version>
        <maven-plugin.versions.version>2.7</maven-plugin.versions.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- "fake" entry to cause the maven-release-plugin to realize that -->
                <!-- ${core-poms.version} refers to the project version, and should -->
                <!-- be updated during a Maven release.                             -->
                <groupId>zone.gryphon</groupId>
                <artifactId>base-pom</artifactId>
                <version>${core-poms.version}</version>
                <classifier>pom</classifier>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <name>Maven Central</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
        </repository>
        <repository>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
            <id>ossrh</id>
            <name>Sonatype OSS Repository Hosting</name>
            <url>https://oss.sonatype.org/content/groups/public</url>
            <layout>default</layout>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <id>central</id>
            <name>Maven Central</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
        </pluginRepository>
        <pluginRepository>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
            <id>ossrh</id>
            <name>Sonatype OSS Repository Hosting</name>
            <url>https://oss.sonatype.org/content/groups/public</url>
            <layout>default</layout>
        </pluginRepository>
    </pluginRepositories>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <!-- see https://github.com/Ekryd/sortpom/wiki/IgnoringSections -->
                    <!-- for how to exclude portions of the POM from sorting        -->
                    <groupId>com.github.ekryd.sortpom</groupId>
                    <artifactId>sortpom-maven-plugin</artifactId>
                    <version>${maven-plugin.sortpom.version}</version>
                    <executions>
                        <execution>
                            <id>sort-pom</id>
                            <goals>
                                <goal>sort</goal>
                            </goals>
                            <configuration>
                                <keepBlankLines>true</keepBlankLines>
                                <encoding>${project.build.sourceEncoding}</encoding>
                                <sortDependencies>scope,groupId,artifactId</sortDependencies>
                                <sortPlugins>scope,groupId,artifactId</sortPlugins>
                                <sortModules>true</sortModules>
                                <sortProperties>false</sortProperties>
                                <createBackupFile>true</createBackupFile>
                                <expandEmptyElements>false</expandEmptyElements>
                                <nrOfIndentSpace>4</nrOfIndentSpace>
                                <predefinedSortOrder>${sortpom.profile}</predefinedSortOrder>
                                <skip>${sortpom.skip}</skip>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${maven-plugin.clean.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-plugin.compiler.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${maven-plugin.dependency.version}</version>
                    <executions>
                        <execution>
                            <id>analyze-dependencies</id>
                            <goals>
                                <goal>analyze-only</goal>
                            </goals>
                            <phase>process-test-classes</phase>
                            <configuration>
                                <failOnWarning>${dependency.fail.on.warnings}</failOnWarning>
                                <outputXML>true</outputXML>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>${maven-plugin.deploy.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>${maven-plugin.enforcer.version}</version>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.ferstl</groupId>
                            <artifactId>pedantic-pom-enforcers</artifactId>
                            <version>${pedantic-pom-enforcers.version}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>enforce-minimum-maven-version</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <rules>
                                    <requireMavenVersion>
                                        <version>${maven.version.minimum}</version>
                                    </requireMavenVersion>
                                </rules>
                            </configuration>
                        </execution>
                        <execution>
                            <id>enforce-minimum-jdk-version</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <rules>
                                    <requireJavaVersion>
                                        <version>${jdk.version.rule}</version>
                                    </requireJavaVersion>
                                </rules>
                            </configuration>
                        </execution>
                        <execution>
                            <id>enforce-unique-dependency-decelerations</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <rules>
                                    <banDuplicatePomDependencyVersions />
                                </rules>
                            </configuration>
                        </execution>
                        <execution>
                            <id>enforce-transitive-dependency-versions</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <rules>
                                    <requireUpperBoundDeps />
                                </rules>
                            </configuration>
                        </execution>
                        <execution>
                            <!-- validate dependencies are declared in the correct scope, -->
                            <!-- and that versions are declared in the correct locations. -->
                            <id>enforce-pedantic-pom</id>
                            <goals>
                                <goal>enforce</goal>
                            </goals>
                            <phase>validate</phase>
                            <configuration>
                                <rules>
                                    <!-- see the following for documentation about configuration of the enforcer -->
                                    <!-- https://github.com/ferstl/pedantic-pom-enforcers/wiki/CompoundPedanticEnforcer -->
                                    <compound implementation="com.github.ferstl.maven.pomenforcers.CompoundPedanticEnforcer">
                                        <!-- Enforcers -->
                                        <enforcers>DEPENDENCY_CONFIGURATION,DEPENDENCY_SCOPE,DEPENDENCY_MANAGEMENT_LOCATION,PLUGIN_CONFIGURATION,PLUGIN_MANAGEMENT_LOCATION</enforcers>

                                        <!-- DEPENDENCY_CONFIGURATION configuration -->
                                        <manageDependencyVersions>true</manageDependencyVersions>
                                        <allowUnmangedProjectVersions>false</allowUnmangedProjectVersions>
                                        <manageDependencyExclusions>true</manageDependencyExclusions>

                                        <!-- DEPENDENCY_SCOPE configuration -->
                                        <compileDependencies>${pedantic.dependencies.compile}</compileDependencies>
                                        <providedDependencies>${pedantic.dependencies.provided}</providedDependencies>
                                        <runtimeDependencies>${pedantic.dependencies.runtime}</runtimeDependencies>
                                        <systemDependencies>${pedantic.dependencies.system}</systemDependencies>
                                        <testDependencies>${pedantic.dependencies.test}</testDependencies>
                                        <importDependencies>${pedantic.dependencies.import}</importDependencies>

                                        <!-- DEPENDENCY_MANAGEMENT_LOCATION configuration -->
                                        <allowParentPomsForDependencyManagement>true</allowParentPomsForDependencyManagement>
                                        <dependencyManagingPoms />

                                        <!-- PLUGIN_CONFIGURATION configuration -->
                                        <managePluginVersions>true</managePluginVersions>
                                        <managePluginConfigurations>false</managePluginConfigurations>
                                        <managePluginDependencies>false</managePluginDependencies>

                                        <!-- PLUGIN_MANAGEMENT_LOCATION configuration -->
                                        <allowParentPomsForPluginManagement>true</allowParentPomsForPluginManagement>
                                        <pluginManagingPoms />
                                    </compound>
                                </rules>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>${maven-plugin.surefire.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${maven-plugin.gpg.version}</version>
                    <executions>
                        <execution>
                            <id>sign-artifacts</id>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                            <phase>verify</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>${maven-plugin.install.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven-plugin.jar.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${maven-plugin.javadoc.version}</version>
                    <executions>
                        <execution>
                            <id>attach-javadoc</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <quiet>${javadoc.quiet}</quiet>
                                <failOnError>${javadoc.failOnError}</failOnError>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-plugin-plugin</artifactId>
                    <version>${maven-plugin.plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>${maven-plugin.project-info-reports.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${maven-plugin.release.version}</version>
                    <configuration>
                        <autoVersionSubmodules>true</autoVersionSubmodules>
                        <useReleaseProfile>false</useReleaseProfile>
                        <releaseProfiles>${release.profiles}</releaseProfiles>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${maven-plugin.resources.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>${maven-plugin.shade.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>${maven-plugin.site.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${maven-plugin.source.version}</version>
                    <executions>
                        <execution>
                            <id>attach-compile-sources</id>
                            <goals>
                                <goal>jar-no-fork</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>attach-test-sources</id>
                            <goals>
                                <goal>test-jar-no-fork</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-plugin.surefire.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-report-plugin</artifactId>
                    <version>${maven-plugin.surefire.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${maven-plugin.build-helper.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>${maven-plugin.exec.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>${maven-plugin.versions.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${maven-plugin.jacoco.version}</version>
                    <executions>
                        <execution>
                            <id>jacoco-prepare</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                            <configuration>
                                <output>file</output>
                            </configuration>
                        </execution>
                        <execution>
                            <id>jacoco-report</id>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <phase>test</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.sonatype.plugins</groupId>
                    <artifactId>nexus-staging-maven-plugin</artifactId>
                    <version>${maven-plugin.nexus-staging.version}</version>
                    <extensions>true</extensions>
                    <configuration>
                        <serverId>ossrh</serverId>
                        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                        <autoReleaseAfterClose>true</autoReleaseAfterClose>
                    </configuration>
                </plugin>

            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>com.github.ekryd.sortpom</groupId>
                <artifactId>sortpom-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>sort-pom</id>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>analyze-dependencies</id>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-minimum-maven-version</id>
                    </execution>
                    <execution>
                        <id>enforce-minimum-jdk-version</id>
                    </execution>
                    <execution>
                        <id>enforce-unique-dependency-decelerations</id>
                    </execution>
                    <execution>
                        <id>enforce-transitive-dependency-versions</id>
                    </execution>
                    <execution>
                        <id>enforce-pedantic-pom</id>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-javadoc</id>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>jacoco-prepare</id>
                    </execution>
                    <execution>
                        <id>jacoco-report</id>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>ci-management</report>
                            <report>dependencies</report>
                            <report>dependency-info</report>
                            <report>dependency-management</report>
                            <report>index</report>
                            <report>issue-management</report>
                            <report>licenses</report>
                            <report>mailing-lists</report>
                            <report>modules</report>
                            <report>plugin-management</report>
                            <report>plugins</report>
                            <report>scm</report>
                            <report>summary</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>

    <profiles>
        <profile>
            <id>release</id>
            <properties>
                <sortpom.skip>true</sortpom.skip>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <!-- skip signing artifacts except when releasing -->
                                <id>sign-artifacts</id>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>attach-site-descriptor</id>
            <activation>
                <file>
                    <exists>${basedir}/src/site/site.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-site-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-default-site-descriptor</id>
                                <goals>
                                    <goal>attach-descriptor</goal>
                                </goals>
                                <phase>package</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>display-updates</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>zone.gryphon.maven</groupId>
                                <artifactId>maven-version-comparison-rules</artifactId>
                                <version>1.0.8-23c82c2</version>
                                <scope>compile</scope>
                            </dependency>
                        </dependencies>
                        <executions>
                            <execution>
                                <id>plugin-updates</id>
                                <goals>
                                    <goal>display-plugin-updates</goal>
                                </goals>
                                <phase>initialize</phase>
                                <configuration>
                                    <allowSnapshots>false</allowSnapshots>
                                    <generateBackupPoms>false</generateBackupPoms>
                                    <rulesUri>${displayUpdates.rulesUri}</rulesUri>
                                </configuration>
                            </execution>
                            <!-- When "allowAnyUpdates" is set to "false," "display-dependency-updates" only looks   -->
                            <!-- for updates which match the first of "allowMajorUpdates", "allowMinorUpdates",      -->
                            <!-- "allowIncrementalUpdates" which is set to true, e.g. if "allowMinorUpdates" is set  -->
                            <!-- to "true," then the execution won't display any dependencies which have only an     -->
                            <!-- incremental update. Thus, in order to get all updates, we need to define a separate -->
                            <!-- execution for each of major/minor/incremental updates if we want to see all updates -->
                            <execution>
                                <id>incremental-dependency-updates</id>
                                <goals>
                                    <goal>display-dependency-updates</goal>
                                </goals>
                                <phase>initialize</phase>
                                <configuration>
                                    <allowAnyUpdates>false</allowAnyUpdates>
                                    <allowMajorUpdates>false</allowMajorUpdates>
                                    <allowMinorUpdates>false</allowMinorUpdates>
                                    <allowIncrementalUpdates>true</allowIncrementalUpdates>
                                    <allowSnapshots>false</allowSnapshots>
                                    <generateBackupPoms>false</generateBackupPoms>
                                    <processDependencies>${displayUpdates.processDependencies}</processDependencies>
                                    <processDependencyManagement>${displayUpdates.processDependencyManagement}</processDependencyManagement>
                                    <processPluginDependencies>${displayUpdates.processPluginDependencies}</processPluginDependencies>
                                    <processPluginDependenciesInPluginManagement>${displayUpdates.processPluginDependenciesInPluginManagement}</processPluginDependenciesInPluginManagement>
                                    <rulesUri>${displayUpdates.rulesUri}</rulesUri>
                                </configuration>
                            </execution>
                            <execution>
                                <id>minor-dependency-updates</id>
                                <goals>
                                    <goal>display-dependency-updates</goal>
                                </goals>
                                <phase>initialize</phase>
                                <configuration>
                                    <allowAnyUpdates>false</allowAnyUpdates>
                                    <allowMajorUpdates>false</allowMajorUpdates>
                                    <allowMinorUpdates>true</allowMinorUpdates>
                                    <allowIncrementalUpdates>false</allowIncrementalUpdates>
                                    <allowSnapshots>false</allowSnapshots>
                                    <generateBackupPoms>false</generateBackupPoms>
                                    <processDependencies>${displayUpdates.processDependencies}</processDependencies>
                                    <processDependencyManagement>${displayUpdates.processDependencyManagement}</processDependencyManagement>
                                    <processPluginDependencies>${displayUpdates.processPluginDependencies}</processPluginDependencies>
                                    <processPluginDependenciesInPluginManagement>${displayUpdates.processPluginDependenciesInPluginManagement}</processPluginDependenciesInPluginManagement>
                                    <rulesUri>${displayUpdates.rulesUri}</rulesUri>
                                </configuration>
                            </execution>
                            <execution>
                                <id>major-dependency-updates</id>
                                <goals>
                                    <goal>display-dependency-updates</goal>
                                </goals>
                                <phase>initialize</phase>
                                <configuration>
                                    <allowAnyUpdates>false</allowAnyUpdates>
                                    <allowMajorUpdates>true</allowMajorUpdates>
                                    <allowMinorUpdates>false</allowMinorUpdates>
                                    <allowIncrementalUpdates>false</allowIncrementalUpdates>
                                    <allowSnapshots>false</allowSnapshots>
                                    <generateBackupPoms>false</generateBackupPoms>
                                    <processDependencies>${displayUpdates.processDependencies}</processDependencies>
                                    <processDependencyManagement>${displayUpdates.processDependencyManagement}</processDependencyManagement>
                                    <processPluginDependencies>${displayUpdates.processPluginDependencies}</processPluginDependencies>
                                    <processPluginDependenciesInPluginManagement>${displayUpdates.processPluginDependenciesInPluginManagement}</processPluginDependenciesInPluginManagement>
                                    <rulesUri>${displayUpdates.rulesUri}</rulesUri>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
