<?xml version="1.0" encoding="UTF-8"?>
<!--

    base-parent (https://github.com/hazendaz/base-parent)

    Copyright 2011-2023 Hazendaz.

    All rights reserved. This program and the accompanying materials
    are made available under the terms of The Apache Software License,
    Version 2.0 which accompanies this distribution, and is available at
    https://www.apache.org/licenses/LICENSE-2.0.txt

    Contributors:
        Hazendaz (Jeremy Landis).

-->
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github.hazendaz</groupId>
    <artifactId>base-parent</artifactId>
    <version>44</version>
    <packaging>pom</packaging>

    <name>base-parent</name>
    <description>Base Maven Parent solving majority of Maven configurations.  Use this to drive your maven builds.</description>
    <url>https://github.com/hazendaz/base-parent</url>
    <inceptionYear>2011</inceptionYear>
    <organization>
        <name>hazendaz</name>
        <url>https://github.com/hazendaz/</url>
    </organization>
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>manual</distribution>
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>

    <developers>
        <developer>
            <id>jlandis</id>
            <name>Jeremy Landis</name>
            <email>jeremylandis@hotmail.com</email>
            <url>https://www.linkedin.com/in/jeremy-landis-548b2719</url>
            <organization>hazendaz</organization>
            <organizationUrl>https://github.com/hazendaz</organizationUrl>
            <roles>
                <role>Architect</role>
                <role>Developer</role>
            </roles>
            <timezone>-5</timezone>
            <properties>
                <picUrl>https://avatars0.githubusercontent.com/u/975267</picUrl>
            </properties>
        </developer>
    </developers>
    <contributors>
        <contributor>
            <name>Jeremy Landis</name>
            <email>jeremylandis@hotmail.com</email>
            <url>https://www.linkedin.com/in/jeremy-landis-548b2719</url>
            <organization>hazendaz</organization>
            <organizationUrl>https://github.com/hazendaz</organizationUrl>
            <roles>
                <role>Developer</role>
            </roles>
            <timezone>-5</timezone>
            <properties>
                <picUrl>https://avatars0.githubusercontent.com/u/975267</picUrl>
            </properties>
        </contributor>
    </contributors>

    <scm>
        <connection>scm:git:ssh://git@github.com/hazendaz/base-parent.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/hazendaz/base-parent.git</developerConnection>
        <tag>base-parent-44</tag>
        <url>https://github.com/hazendaz/base-parent</url>
    </scm>
    <issueManagement>
        <system>Github</system>
        <url>https://github.com/hazendaz/base-parent/issues</url>
    </issueManagement>
    <ciManagement>
        <system>Github</system>
        <url>https://github.com/hazendaz/base-parent/actions</url>
        <notifiers>
            <notifier>
                <type>mail</type>
                <sendOnError>true</sendOnError>
                <sendOnFailure>true</sendOnFailure>
                <sendOnSuccess>false</sendOnSuccess>
                <sendOnWarning>false</sendOnWarning>
                <configuration>
                    <address>jeremylandis@hotmail.com</address>
                </configuration>
            </notifier>
        </notifiers>
    </ciManagement>
    <distributionManagement>
        <repository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
        <snapshotRepository>
            <id>ossrh</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <site>
            <id>gh-pages-scm</id>
            <name>Base Parent GitHub Pages</name>
            <url>scm:git:ssh://git@github.com/hazendaz/base-parent.git</url>
        </site>
    </distributionManagement>

    <properties>
        <!-- Copyright -->
        <copyright>2023</copyright>

        <!-- Github Token -->
        <github.global.server>github</github.global.server>

        <!-- Jacoco minimum code coverage (used under checks only currently) -->
        <jacoco.minimum.coverage>1.00</jacoco.minimum.coverage>

        <!-- Automatic Module Name -->
        <module.name>com.github.hazendaz.parent</module.name>

        <!-- Maven date configuration -->
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>

        <!-- Maven compiler options -->
        <java.version>8</java.version>
        <java.release.version>8</java.release.version>
        <java.test.version>${java.version}</java.test.version>
        <java.test.release.version>${java.release.version}</java.test.release.version>

        <!-- Javadoc Release is strict due to maven bug and automatic module naming; it needs extra help, see examples -->
        <javadoc.java.release.version>8</javadoc.java.release.version>
        <javadoc.legacy.mode>true</javadoc.legacy.mode>

        <!-- Javadoc help examples

        Additional modules need added if build notes to do so, following is an example (note errors are not very clear)
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <configuration>
                            <additionalOptions combine.children="append">
                                <additionalOption>\-\-add-modules</additionalOption>
                                <additionalOption>java.sql</additionalOption>
                                <additionalOption>\-\-add-modules</additionalOption>
                                <additionalOption>java.naming</additionalOption>
                                <additionalOption>...others...</additionalOption>
                             </additionalOptions>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
        -->

        <!-- Legacy compiler options source/target not really needed now (but still used by things like sonar, m2e) -->
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <maven.compiler.testSource>${java.test.version}</maven.compiler.testSource>
        <maven.compiler.testTarget>${java.test.version}</maven.compiler.testTarget>

        <maven.compiler.release>${java.release.version}</maven.compiler.release>
        <maven.compiler.testRelease>${java.test.release.version}</maven.compiler.testRelease>

        <!-- Get method parameter names via reflection -->
        <maven.compiler.parameters>true</maven.compiler.parameters>

        <!-- Maven minimum version -->
        <maven.min-version>3.9.6</maven.min-version>

        <!-- Project Encoding -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.build.resourceEncoding>UTF-8</project.build.resourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Reproducible Builds -->
        <project.build.outputTimestamp>1703630308</project.build.outputTimestamp>

        <!-- Due to maven bug, fix timestamp -->
        <timestamp>${maven.build.timestamp}</timestamp>

        <!-- Enforcer Jdks Allowed -->
        <allowed.build.jdks>[11,12),[17,18),[21,22),[22,23)</allowed.build.jdks>

        <!-- Supported Versions -->
        <checker-qual.version>3.42.0</checker-qual.version>
        <error-prone.version>2.24.0</error-prone.version>
        <hibernate-validator.version>6.2.5.Final</hibernate-validator.version>
        <j2objc.version>2.8</j2objc.version>
        <lombok.version>1.18.30</lombok.version>
        <modernizer.version>2.7.0</modernizer.version>
        <spotbugs.version>4.8.3</spotbugs.version>

        <!-- Parent Tracking on site -->
        <base-parent.version>44</base-parent.version>

        <!-- Checkstyle -->
        <checkstyle.config>checkstyle.xml</checkstyle.config>

        <!-- plugin versions -->
        <antrun.plugin>3.1.0</antrun.plugin>
        <assembly.plugin>3.6.0</assembly.plugin>
        <build-helper.plugin>3.5.0</build-helper.plugin>
        <buildplan.plugin>2.2.2</buildplan.plugin>
        <checkstyle.plugin>3.3.1</checkstyle.plugin>
        <clean.plugin>3.3.2</clean.plugin>
        <compiler.plugin>3.12.1</compiler.plugin>
        <coveralls.plugin>4.5.0-M2</coveralls.plugin>
        <cyclonedx.plugin>2.7.10</cyclonedx.plugin>
        <dependency.plugin>3.6.1</dependency.plugin>
        <dependency-check.plugin>9.0.7</dependency-check.plugin>
        <deploy.plugin>3.1.1</deploy.plugin>
        <enforcer.plugin>3.4.1</enforcer.plugin>
        <failsafe.plugin>3.2.3</failsafe.plugin>
        <find-and-replace.plugin>1.1.0</find-and-replace.plugin>
        <formatter.plugin>2.23.0</formatter.plugin>
        <frontend.plugin>1.15.0</frontend.plugin>
        <git-commit.plugin>7.0.0</git-commit.plugin>
        <gpg.plugin>3.1.0</gpg.plugin>
        <htmlcompressor.plugin>1.9.2.1</htmlcompressor.plugin>
        <impsort.plugin>1.9.0</impsort.plugin>
        <install.plugin>3.1.1</install.plugin>
        <jacoco.plugin>0.8.11</jacoco.plugin>
        <jandex.plugin>1.2.3</jandex.plugin>
        <jar.plugin>3.3.0</jar.plugin>
        <javadoc.plugin>3.6.3</javadoc.plugin>
        <jaxws.plugin>2.3.7</jaxws.plugin>
        <joinfaces.plugin>4.7.18</joinfaces.plugin>
        <jxr.plugin>3.3.1</jxr.plugin>
        <kotlin.plugin>1.9.22</kotlin.plugin>
        <license.plugin>4.3</license.plugin>
        <lifecycle.plugin>1.0.0</lifecycle.plugin>
        <lombok.plugin>1.18.20.0</lombok.plugin>
        <makeself.plugin>1.6.1</makeself.plugin>
        <modernizer.plugin>2.7.0</modernizer.plugin>
        <pdf.plugin>1.6.1</pdf.plugin>
        <pmd.plugin>3.21.2</pmd.plugin>
        <project-info.plugin>3.5.0</project-info.plugin>
        <release.plugin>3.0.1</release.plugin>
        <resources.plugin>3.3.1</resources.plugin>
        <rewrite.plugin>5.17.1</rewrite.plugin>
        <smartsprites.plugin>2.1.3</smartsprites.plugin>
        <scm-publish.plugin>3.2.1</scm-publish.plugin>
        <site.plugin>4.0.0-M13</site.plugin>
        <sonar.plugin>3.10.0.2594</sonar.plugin>
        <sortpom.plugin>3.3.0</sortpom.plugin>
        <source.plugin>3.3.0</source.plugin>
        <spotbugs.plugin>4.8.2.0</spotbugs.plugin>
        <spotless.plugin>2.41.1</spotless.plugin>
        <springboot.plugin>2.7.18</springboot.plugin>
        <surefire.plugin>3.2.3</surefire.plugin>
        <taglist.plugin>3.0.0</taglist.plugin>
        <versions.plugin>2.16.2</versions.plugin>
        <war.plugin>3.4.0</war.plugin>
        <wrapper.plugin>3.2.0</wrapper.plugin>
        <whitespace.plugin>1.3.1</whitespace.plugin>
        <yuicompressor.plugin>1.5.1</yuicompressor.plugin>
        <xml-format.plugin>3.2.0</xml-format.plugin>

        <!-- Dependencies for plugins -->
        <asm.version>9.6</asm.version>
        <build-tools.version>1.3.1</build-tools.version>
        <checkstyle.version>10.12.6</checkstyle.version>
        <extra-enforcer-rules.version>1.7.0</extra-enforcer-rules.version>
        <fluido.version note="Make sure to update in site.xml">2.0.0-M8</fluido.version>
        <htmlcompressor.version>1.9.2</htmlcompressor.version>
        <license-git.version>4.3</license-git.version>
        <pmd.version>6.55.0</pmd.version>
        <restrict-imports-enforcer-rule.version>2.4.0</restrict-imports-enforcer-rule.version>
        <yuicompressor.version>2.4.8</yuicompressor.version>

        <!-- Spotbugs Extensions -->
        <bug-pattern.version>1.5.0</bug-pattern.version>
        <findsecbugs.version>1.12.0</findsecbugs.version>
        <sb-contrib.version>7.6.4</sb-contrib.version>

        <!-- Verification Checks -->
        <error-prone.failOnViolations>-XepAllErrorsAsWarnings</error-prone.failOnViolations>
        <error-prone.skipGeneratedCode>-XepDisableWarningsInGeneratedCode</error-prone.skipGeneratedCode>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-qual</artifactId>
            <version>${checker-qual.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.errorprone</groupId>
            <artifactId>error_prone_annotations</artifactId>
            <version>${error-prone.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator-annotation-processor</artifactId>
            <version>${hibernate-validator.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.j2objc</groupId>
            <artifactId>j2objc-annotations</artifactId>
            <version>${j2objc.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.gaul</groupId>
            <artifactId>modernizer-maven-annotations</artifactId>
            <version>${modernizer.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-annotations</artifactId>
            <version>${spotbugs.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <!-- Diff Plug Maven Plugins -->
                <plugin>
                    <groupId>com.diffplug.spotless</groupId>
                    <artifactId>spotless-maven-plugin</artifactId>
                    <version>${spotless.plugin}</version>
                    <configuration>
                        <formats>
                            <format>
                                <includes>
                                    <include>**/*.sh</include>
                                    <include>**/*.yml</include>
                                    <include>**/*.yaml</include>
                                </includes>
                                <excludes>
                                    <exclude>**/node_modules/**</exclude>
                                    <exclude>**/target/**</exclude>
                                </excludes>
                                <trimTrailingWhitespace />
                                <endWithNewline />
                                <indent>
                                    <spaces>true</spaces>
                                    <spacesPerTab>2</spacesPerTab>
                                </indent>
                            </format>
                            <format>
                                <includes>
                                    <include>**/*.xml</include>
                                </includes>
                                <excludes>
                                    <exclude>**/node_modules/**</exclude>
                                    <exclude>**/target/**</exclude>
                                </excludes>
                                <trimTrailingWhitespace />
                                <endWithNewline />
                                <indent>
                                    <spaces>true</spaces>
                                    <spacesPerTab>4</spacesPerTab>
                                </indent>
                            </format>
                        </formats>
                    </configuration>
                </plugin>

                <!-- Github Provided Plugins -->
                <plugin>
                    <groupId>com.github.eirslett</groupId>
                    <artifactId>frontend-maven-plugin</artifactId>
                    <version>${frontend.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>com.github.ekryd.sortpom</groupId>
                    <artifactId>sortpom-maven-plugin</artifactId>
                    <version>${sortpom.plugin}</version>
                    <configuration>
                        <predefinedSortOrder>recommended_2008_06</predefinedSortOrder>
                        <createBackupFile>false</createBackupFile>
                        <expandEmptyElements>false</expandEmptyElements>
                        <keepBlankLines>true</keepBlankLines>
                        <nrOfIndentSpace>4</nrOfIndentSpace>
                        <spaceBeforeCloseEmptyElement>true</spaceBeforeCloseEmptyElement>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</groupId>
                    <artifactId>coveralls-maven-plugin</artifactId>
                    <version>${coveralls.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</groupId>
                    <artifactId>htmlcompressor-maven-plugin</artifactId>
                    <version>${htmlcompressor.plugin}</version>
                    <configuration>
                        <compressCss>true</compressCss>
                        <compressJavaScript>true</compressJavaScript>
                        <javascriptHtmlSprite>false</javascriptHtmlSprite>
                        <removeIntertagSpaces>true</removeIntertagSpaces>
                        <srcFolder>${project.basedir}/src/main/resources</srcFolder>
                        <targetFolder>${project.basedir}/target/classes</targetFolder>
                        <yuiJsNoMunge>true</yuiJsNoMunge>
                        <fileExt>
                            <fileExt>html</fileExt>
                            <fileExt>jsp</fileExt>
                            <fileExt>jspx</fileExt>
                            <fileExt>xhtml</fileExt>
                            <fileExt>xml</fileExt>
                            <fileExt>xsd</fileExt>
                            <fileExt>xslt</fileExt>
                            <fileExt>wsdl</fileExt>
                        </fileExt>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.hazendaz</groupId>
                            <artifactId>htmlcompressor</artifactId>
                            <version>${htmlcompressor.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.yahoo.platform.yui</groupId>
                            <artifactId>yuicompressor</artifactId>
                            <version>${yuicompressor.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</groupId>
                    <artifactId>makeself-maven-plugin</artifactId>
                    <version>${makeself.plugin}</version>
                    <configuration>
                        <keepUmask>true</keepUmask>
                        <sha256>true</sha256>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</groupId>
                    <artifactId>smartsprites-maven-plugin</artifactId>
                    <version>${smartsprites.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>com.github.spotbugs</groupId>
                    <artifactId>spotbugs-maven-plugin</artifactId>
                    <version>${spotbugs.plugin}</version>
                    <configuration>
                        <effort>Max</effort>
                        <includeTests>true</includeTests>
                        <failOnError>false</failOnError>
                        <plugins>
                            <plugin>
                                <groupId>com.mebigfatguy.sb-contrib</groupId>
                                <artifactId>sb-contrib</artifactId>
                                <version>${sb-contrib.version}</version>
                            </plugin>
                            <plugin>
                                <groupId>com.h3xstream.findsecbugs</groupId>
                                <artifactId>findsecbugs-plugin</artifactId>
                                <version>${findsecbugs.version}</version>
                            </plugin>
                            <plugin>
                                <groupId>jp.skypencil.findbugs.slf4j</groupId>
                                <artifactId>bug-pattern</artifactId>
                                <version>${bug-pattern.version}</version>
                            </plugin>
                        </plugins>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.spotbugs</groupId>
                            <artifactId>spotbugs</artifactId>
                            <version>${spotbugs.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</groupId>
                    <artifactId>whitespace-maven-plugin</artifactId>
                    <version>${whitespace.plugin}</version>
                </plugin>

                <!-- Mycila Provided Plugins -->
                <plugin>
                    <groupId>com.mycila</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>${license.plugin}</version>
                    <configuration>
                        <licenseSets>
                            <licenseSet>
                                <header>LICENSE_HEADER</header>
                                <excludes>
                                    <!-- Default excludes located at https://github.com/mathieucarbou/license-maven-plugin/blob/master/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/Default.java -->

                                    <!-- Exclude old license types I used in the past -->
                                    <exclude>LICENSE.txt</exclude>
                                    <exclude>LICENSE.TXT</exclude>
                                    <exclude>license.txt</exclude>
                                </excludes>
                            </licenseSet>
                        </licenseSets>
                        <prohibitLegacyUse>true</prohibitLegacyUse>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.mycila</groupId>
                            <artifactId>license-maven-plugin-git</artifactId>
                            <version>${license-git.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- Sun (Jakarta) Provided Plugins -->
                <plugin>
                    <groupId>com.sun.xml.ws</groupId>
                    <artifactId>jaxws-maven-plugin</artifactId>
                    <version>${jaxws.plugin}</version>
                </plugin>

                <!-- Github IO Provided Plugins -->
                <plugin>
                    <groupId>io.github.floverfelt</groupId>
                    <artifactId>find-and-replace-maven-plugin</artifactId>
                    <version>${find-and-replace.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>io.github.git-commit-id</groupId>
                    <artifactId>git-commit-id-maven-plugin</artifactId>
                    <version>${git-commit.plugin}</version>
                    <configuration>
                        <failOnNoGitDirectory>false</failOnNoGitDirectory>
                        <!-- Fixes occassional issue in commit id plugin - see
                            https://github.com/ktoso/maven-git-commit-id-plugin/issues/61 -->
                        <gitDescribe>
                            <always>true</always>
                        </gitDescribe>
                    </configuration>
                </plugin>

                <!-- Alchim31 Provided Plugins -->
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>yuicompressor-maven-plugin</artifactId>
                    <version>${yuicompressor.plugin}</version>
                    <configuration>
                        <nomunge>true</nomunge>
                        <nosuffix>true</nosuffix>
                        <excludes>
                            <exclude>**/*.min.js</exclude>
                            <exclude>**/*.min.css</exclude>
                        </excludes>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.yahoo.platform.yui</groupId>
                            <artifactId>yuicompressor</artifactId>
                            <version>${yuicompressor.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- Revelc Provided Plugins -->
                <plugin>
                    <groupId>net.revelc.code</groupId>
                    <artifactId>impsort-maven-plugin</artifactId>
                    <version>${impsort.plugin}</version>
                    <configuration>
                        <groups>au,ch,com,de,io,jakarta,java,javassist,javax,lombok,mockit,net,nl,ognl,org</groups>
                        <staticGroups>java,*</staticGroups>
                        <removeUnused>true</removeUnused>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>net.revelc.code.formatter</groupId>
                    <artifactId>formatter-maven-plugin</artifactId>
                    <version>${formatter.plugin}</version>
                    <configuration>
                        <configFile>eclipse-formatter-config-4space.xml</configFile>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.github.hazendaz</groupId>
                            <artifactId>build-tools</artifactId>
                            <version>${build-tools.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- Maven Provided Plugins -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>${antrun.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>${assembly.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-checkstyle-plugin</artifactId>
                    <version>${checkstyle.plugin}</version>
                    <configuration>
                        <configLocation>${checkstyle.config}</configLocation>
                        <failOnViolation>false</failOnViolation>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${clean.plugin}</version>
                    <configuration>
                        <!-- Delete all from target but not target itself -->
                        <excludeDefaultDirectories>true</excludeDefaultDirectories>
                        <filesets>
                            <fileset>
                                <directory>${project.build.directory}</directory>
                                <includes>
                                    <include>**/*</include>
                                </includes>
                            </fileset>
                        </filesets>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${compiler.plugin}</version>
                    <configuration>
                        <annotationProcessorPaths>
                            <annotationProcessorPath>
                                <groupId>com.google.errorprone</groupId>
                                <artifactId>error_prone_core</artifactId>
                                <version>${error-prone.version}</version>
                            </annotationProcessorPath>
                            <annotationProcessorPath>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                                <version>${lombok.version}</version>
                            </annotationProcessorPath>
                            <annotationProcessorPath>
                                <groupId>org.hibernate.validator</groupId>
                                <artifactId>hibernate-validator-annotation-processor</artifactId>
                                <version>${hibernate-validator.version}</version>
                            </annotationProcessorPath>
                        </annotationProcessorPaths>

                        <compilerArgs>
                            <compilerArg>-XDcompilePolicy=simple</compilerArg>
                            <compilerArg>-Xplugin:ErrorProne ${error-prone.failOnViolations} ${error-prone.skipGeneratedCode}</compilerArg>
                        </compilerArgs>

                        <showDeprecation>true</showDeprecation>
                        <showWarnings>true</showWarnings>

                        <!-- Slightly faster builds, see https://issues.apache.org/jira/browse/MCOMPILER-209 -->
                        <useIncrementalCompilation>false</useIncrementalCompilation>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>${dependency.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>${deploy.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>${enforcer.plugin}</version>
                    <configuration>
                        <rules>
                            <bannedDependencies>
                                <message>Do not use obsolete logging libraries.  Prefer slf4j/logback and override slf4j libraries for replacements</message>
                                <excludes>
                                    <exclude>commons-logging:commons-logging</exclude>
                                    <exclude>log4j:log4j</exclude>
                                    <exclude>org.slf4j:slf4j-log4j12</exclude>
                                </excludes>
                            </bannedDependencies>
                            <banDuplicatePomDependencyVersions />
                            <enforceBytecodeVersion>
                                <maxJdkVersion>${java.version}</maxJdkVersion>
                                <ignoredScopes>test</ignoredScopes>
                            </enforceBytecodeVersion>
                            <reactorModuleConvergence />
                            <requireJavaVersion>
                                <version>${allowed.build.jdks}</version>
                            </requireJavaVersion>
                            <requireMavenVersion>
                                <message>Please upgrade maven and configure 'M2_HOME'.</message>
                                <version>[${maven.min-version},)</version>
                            </requireMavenVersion>
                            <requirePluginVersions>
                                <message>[ERROR] Best Practice is to always define plugin versions!</message>
                                <banLatest>true</banLatest>
                                <banRelease>true</banRelease>
                                <banSnapshots>true</banSnapshots>
                                <phases>clean,deploy,site</phases>
                            </requirePluginVersions>
                            <restrictImports>
                                <includeTestCode>true</includeTestCode>
                                <groups>
                                    <group>
                                        <reason>Don't allow obsolete logging</reason>
                                        <bannedImports>
                                            <bannedImport>java.util.logging.**</bannedImport>
                                            <bannedImport>org.apache.commons.logging.**</bannedImport>
                                            <bannedImport>org.apache.log4j.**</bannedImport>
                                        </bannedImports>
                                    </group>
                                </groups>
                            </restrictImports>
                        </rules>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>extra-enforcer-rules</artifactId>
                            <version>${extra-enforcer-rules.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>de.skuzzle.enforcer</groupId>
                            <artifactId>restrict-imports-enforcer-rule</artifactId>
                            <version>${restrict-imports-enforcer-rule.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>${failsafe.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${gpg.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>${install.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${jar.plugin}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addBuildEnvironmentEntries>false</addBuildEnvironmentEntries>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Automatic-Module-Name>${module.name}</Automatic-Module-Name>
                                <Copyright>${copyright}</Copyright>
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                                <X-Compile-Release-JDK>${maven.compiler.release}</X-Compile-Release-JDK>
                            </manifestEntries>
                        </archive>
                        <skipIfEmpty>true</skipIfEmpty>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${javadoc.plugin}</version>
                    <configuration>
                        <additionalOptions>
                            <additionalOption>-html5</additionalOption>
                        </additionalOptions>
                        <archive>
                            <manifest>
                                <addBuildEnvironmentEntries>false</addBuildEnvironmentEntries>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Automatic-Module-Name>${module.name}</Automatic-Module-Name>
                                <Copyright>${copyright}</Copyright>
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                                <X-Compile-Release-JDK>${maven.compiler.release}</X-Compile-Release-JDK>
                            </manifestEntries>
                        </archive>
                        <notimestamp>true</notimestamp>
                        <quiet>true</quiet>
                        <release>${javadoc.java.release.version}</release>
                        <source>${javadoc.java.release.version}</source>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jxr-plugin</artifactId>
                    <version>${jxr.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pdf-plugin</artifactId>
                    <version>${pdf.plugin}</version>
                    <configuration>
                        <outputDirectory>${project.reporting.outputDirectory}</outputDirectory>
                        <includeReports>false</includeReports>
                    </configuration>
                    <!-- Execution such as this in plugin management requires plugin definition in build to work -->
                    <executions>
                        <execution>
                            <id>pdf</id>
                            <goals>
                                <goal>pdf</goal>
                            </goals>
                            <phase>prepare-package</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-pmd-plugin</artifactId>
                    <version>${pmd.plugin}</version>
                    <configuration>
                        <analysisCache>true</analysisCache>
                        <failOnViolation>false</failOnViolation>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-core</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-groovy</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-html</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-java</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-java8</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-javascript</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-jsp</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-kotlin</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.sourceforge.pmd</groupId>
                            <artifactId>pmd-xml</artifactId>
                            <version>${pmd.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>${project-info.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${release.plugin}</version>
                    <configuration>
                        <addSchema>false</addSchema>
                        <arguments>-Daether.checksums.algorithms=SHA-512,SHA-256,SHA-1,MD5</arguments>
                        <autoVersionSubmodules>true</autoVersionSubmodules>
                        <releaseProfiles>release</releaseProfiles>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${resources.plugin}</version>
                    <configuration>
                        <!-- Defaults to source, use resources as this is a resource -->
                        <propertiesEncoding>${project.build.resourceEncoding}</propertiesEncoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-publish-plugin</artifactId>
                    <version>${scm-publish.plugin}</version>
                    <configuration>
                        <checkoutDirectory>${user.home}/maven-sites/${project.name}</checkoutDirectory>
                        <!-- no need for site:stage, use target/site or target/checkout/target/site on release -->
                        <content>${project.reporting.outputDirectory}</content>
                        <scmBranch>gh-pages</scmBranch>
                        <tryUpdate>true</tryUpdate>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>${site.plugin}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addBuildEnvironmentEntries>false</addBuildEnvironmentEntries>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Automatic-Module-Name>${module.name}</Automatic-Module-Name>
                                <Copyright>${copyright}</Copyright>
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                                <X-Compile-Release-JDK>${maven.compiler.release}</X-Compile-Release-JDK>
                            </manifestEntries>
                        </archive>
                        <!-- don't deploy site with maven-site-plugin (instead use scm publish during release) -->
                        <skipDeploy>true</skipDeploy>
                    </configuration>
                    <dependencies>
                        <!-- For reporting only of versions -->
                        <dependency>
                            <groupId>org.apache.maven.skins</groupId>
                            <artifactId>maven-fluido-skin</artifactId>
                            <version>${fluido.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.github.hazendaz</groupId>
                            <artifactId>base-parent</artifactId>
                            <version>${base-parent.version}</version>
                            <type>pom</type>
                        </dependency>
                    </dependencies>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${source.plugin}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addBuildEnvironmentEntries>false</addBuildEnvironmentEntries>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Automatic-Module-Name>${module.name}</Automatic-Module-Name>
                                <Copyright>${copyright}</Copyright>
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                                <X-Compile-Release-JDK>${maven.compiler.release}</X-Compile-Release-JDK>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${surefire.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-report-plugin</artifactId>
                    <version>${surefire.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>${war.plugin}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addBuildEnvironmentEntries>false</addBuildEnvironmentEntries>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Automatic-Module-Name>${module.name}</Automatic-Module-Name>
                                <Copyright>${copyright}</Copyright>
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                                <X-Compile-Release-JDK>${maven.compiler.release}</X-Compile-Release-JDK>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-wrapper-plugin</artifactId>
                    <version>${wrapper.plugin}</version>
                </plugin>

                <!-- Codehaus Provided Plugins -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${build-helper.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>buildplan-maven-plugin</artifactId>
                    <version>${buildplan.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>taglist-maven-plugin</artifactId>
                    <version>${taglist.plugin}</version>
                    <configuration>
                        <tagListOptions>
                            <tagClasses>
                                <tagClass>
                                    <displayName>FIXME Work</displayName>
                                    <tags>
                                        <tag>
                                            <matchString>fixme</matchString>
                                            <matchType>ignoreCase</matchType>
                                        </tag>
                                        <tag>
                                            <matchString>@fixme</matchString>
                                            <matchType>ignoreCase</matchType>
                                        </tag>
                                    </tags>
                                </tagClass>
                                <tagClass>
                                    <displayName>Todo Work</displayName>
                                    <tags>
                                        <tag>
                                            <matchString>todo</matchString>
                                            <matchType>ignoreCase</matchType>
                                        </tag>
                                        <tag>
                                            <matchString>@todo</matchString>
                                            <matchType>ignoreCase</matchType>
                                        </tag>
                                    </tags>
                                </tagClass>
                                <tagClass>
                                    <displayName>Deprecated Work</displayName>
                                    <tags>
                                        <tag>
                                            <matchString>@deprecated</matchString>
                                            <matchType>ignoreCase</matchType>
                                        </tag>
                                    </tags>
                                </tagClass>
                            </tagClasses>
                        </tagListOptions>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>versions-maven-plugin</artifactId>
                    <version>${versions.plugin}</version>
                </plugin>

                <!-- Cyclonedx Maven Plugins -->
                <plugin>
                    <groupId>org.cyclonedx</groupId>
                    <artifactId>cyclonedx-maven-plugin</artifactId>
                    <version>${cyclonedx.plugin}</version>
                    <configuration>
                        <verbose>false</verbose>
                    </configuration>
                </plugin>

                <!-- Gaul Provided Plugins -->
                <plugin>
                    <groupId>org.gaul</groupId>
                    <artifactId>modernizer-maven-plugin</artifactId>
                    <version>${modernizer.plugin}</version>
                    <configuration>
                        <javaVersion>${maven.compiler.target}</javaVersion>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.ow2.asm</groupId>
                            <artifactId>asm</artifactId>
                            <version>${asm.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- Jacoco Provided Plugins -->
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.plugin}</version>
                    <configuration>
                        <rules>
                            <rule>
                                <element>BUNDLE</element>
                                <limits>
                                    <limit>
                                        <counter>COMPLEXITY</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>${jacoco.minimum.coverage}</minimum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                </plugin>

                <!-- Jboss Maven Plugins -->
                <plugin>
                    <groupId>org.jboss.jandex</groupId>
                    <artifactId>jandex-maven-plugin</artifactId>
                    <version>${jandex.plugin}</version>
                </plugin>

                <!-- Jetbrains Maven Plugins -->
                <plugin>
                    <groupId>org.jetbrains.kotlin</groupId>
                    <artifactId>kotlin-maven-plugin</artifactId>
                    <version>${kotlin.plugin}</version>
                    <configuration>
                        <jvmTarget>${java.release.version</jvmTarget>
                        <javaParameters>true</javaParameters>
                    </configuration>
                </plugin>

                <!-- Joinfaces Maven Plugins -->
                <plugin>
                    <groupId>org.joinfaces</groupId>
                    <artifactId>joinfaces-maven-plugin</artifactId>
                    <version>${joinfaces.plugin}</version>
                </plugin>

                <!-- OPenwrite Maven Plugins -->
                <plugin>
                    <groupId>org.openrewrite.maven</groupId>
                    <artifactId>rewrite-maven-plugin</artifactId>
                    <version>${rewrite.plugin}</version>
                </plugin>

                <!-- Owasp Provided Plugins -->
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>${dependency-check.plugin}</version>
                    <configuration>
                        <failOnError>false</failOnError>
                        <nvdApiServerId>nvd</nvdApiServerId>
                    </configuration>
                </plugin>

                <!-- Project Lombok Maven Plugins -->
                <plugin>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok-maven-plugin</artifactId>
                    <version>${lombok.plugin}</version>
                    <configuration>
                        <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>

                <!-- Sonar Provided Plugins -->
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>${sonar.plugin}</version>
                </plugin>

                <!-- Springboot Maven Plugins -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${springboot.plugin}</version>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <!-- Build Plugins -->
            <plugin>
                <groupId>io.github.git-commit-id</groupId>
                <artifactId>git-commit-id-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>git-commit-id</id>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                        <phase>validate</phase>
                    </execution>
                </executions>
            </plugin>

            <!-- Packaging types / Tools -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-jars</id>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Reporting Plugins -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Tools -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                            <goal>test-jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <id>enforce-maven</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>enforce-clean</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>pre-clean</phase>
                    </execution>
                    <execution>
                        <id>enforce-site</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>pre-site</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Checkstyle dependencies required here or they won't be used (per maven) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <dependencies>
                    <dependency>
                        <groupId>com.github.hazendaz</groupId>
                        <artifactId>build-tools</artifactId>
                        <version>${build-tools.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${checkstyle.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.gaul</groupId>
                <artifactId>modernizer-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>modernizer</id>
                        <goals>
                            <goal>modernizer</goal>
                        </goals>
                        <phase>verify</phase>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.cyclonedx</groupId>
                <artifactId>cyclonedx-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>makeAggregateBom</id>
                        <goals>
                            <goal>makeAggregateBom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>aggregate-cpd</report>
                            <report>aggregate-pmd</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <reportSets>
                    <reportSet>
                        <reports>
                            <!-- select non-aggregate reports -->
                            <report>report</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <!-- This plugin will fail if any POM is marked as Byte Order
                Mark is UTF-8 (BOM). If this occurs, create a new POM and move the contents
                in order to fix. For reference, this was a problem with mybatis/mybatis-spring
                poms. -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>taglist-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.owasp</groupId>
                <artifactId>dependency-check-maven</artifactId>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>aggregate</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>

    <profiles>
        <profile>
            <id>checks</id>
            <build>
                <plugins>
                    <!-- Reporting Plugins -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-checkstyle-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-pmd-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>check</goal>
                                    <goal>cpd-check</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- External Tools -->
                    <plugin>
                        <groupId>com.github.spotbugs</groupId>
                        <artifactId>spotbugs-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                                <phase>verify</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.jacoco</groupId>
                        <artifactId>jacoco-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>check</id>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.owasp</groupId>
                        <artifactId>dependency-check-maven</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>compression</id>
            <activation>
                <file>
                    <exists>${project.basedir}/compression.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.hazendaz.maven</groupId>
                        <artifactId>htmlcompressor-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <goals>
                                    <goal>html</goal>
                                </goals>
                                <phase>compile</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>yuicompressor-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                                <phase>compile</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>eclipse</id>
            <activation>
                <property>
                    <name>m2e.version</name>
                </property>
            </activation>
            <properties>
                <!-- Make m2e use java at test revision level -->
                <maven.compiler.source>${java.test.version}</maven.compiler.source>
                <maven.compiler.target>${java.test.version}</maven.compiler.target>
                <maven.compiler.release>${java.test.release.version}</maven.compiler.release>
            </properties>
            <build>
                <pluginManagement>
                    <plugins>
                        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                        <plugin>
                            <groupId>org.eclipse.m2e</groupId>
                            <artifactId>lifecycle-mapping</artifactId>
                            <!-- Keep version here as fake version and maven report info has problems defining it in dependency management -->
                            <version>${lifecycle.plugin}</version>
                            <configuration>
                                <lifecycleMappingMetadata>
                                    <pluginExecutions>
                                        <!-- impsort m2e in plugin states to ignore, we will process -->
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>net.revelc.code</groupId>
                                                <artifactId>impsort-maven-plugin</artifactId>
                                                <versionRange>[${impsort.plugin},)</versionRange>
                                                <goals>
                                                    <goal>sort</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <execute>
                                                    <runOnConfiguration>true</runOnConfiguration>
                                                    <runOnIncremental>true</runOnIncremental>
                                                </execute>
                                            </action>
                                        </pluginExecution>
                                    </pluginExecutions>
                                </lifecycleMappingMetadata>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>format</id>
            <activation>
                <file>
                    <exists>${project.basedir}/format.xml</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>net.revelc.code.formatter</groupId>
                        <artifactId>formatter-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>format</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>net.revelc.code</groupId>
                        <artifactId>impsort-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>sort</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.openrewrite.maven</groupId>
                        <artifactId>rewrite-maven-plugin</artifactId>
                        <configuration>
                            <activeRecipes>
                                <recipe>org.openrewrite.java.RemoveUnusedImports</recipe>
                            </activeRecipes>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>com.github.ekryd.sortpom</groupId>
                        <artifactId>sortpom-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>sort</goal>
                                </goals>
                                <phase>verify</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>com.diffplug.spotless</groupId>
                        <artifactId>spotless-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>apply</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>com.github.hazendaz.maven</groupId>
                        <artifactId>whitespace-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>trim</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>jdk17on</id>
            <activation>
                <jdk>[17,)</jdk>
            </activation>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <configuration>
                                <fork>true</fork>
                                <compilerArgs combine.children="append">
                                    <!-- Error Prone Configuration -->
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</compilerArg>

                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</compilerArg>

                                    <!-- Lombok Configuration (not needed since 1.18.20)-->
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</compilerArg>
                                    <compilerArg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</compilerArg>
                                </compilerArgs>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>

        <profile>
            <id>license-header</id>
            <activation>
                <file>
                    <exists>${project.basedir}/LICENSE_HEADER</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.mycila</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>format</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                                <phase>verify</phase>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Skip license plugin during release as maven release is now shallow cloned -->
                    <plugin>
                        <groupId>com.mycila</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>
                    <!-- deploy site with maven-scm-publish-plugin -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-scm-publish-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>scm-publish</id>
                                <goals>
                                    <goal>publish-scm</goal>
                                </goals>
                                <phase>site-deploy</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>rewrite-junit</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.openrewrite.maven</groupId>
                        <artifactId>rewrite-maven-plugin</artifactId>
                        <configuration>
                            <activeRecipes>
                                <recipe>org.openrewrite.java.testing.junit5.JUnit5BestPractices</recipe>
                                <recipe>org.openrewrite.java.RemoveUnusedImports</recipe>
                            </activeRecipes>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>org.openrewrite.recipe</groupId>
                                <artifactId>rewrite-testing-frameworks</artifactId>
                                <version>2.1.5</version>
                            </dependency>
                        </dependencies>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>wsimport</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.sun.xml.ws</groupId>
                        <artifactId>jaxws-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>wsimport</id>
                                <goals>
                                    <goal>wsimport</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

    </profiles>
</project>
