<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.yusiwen</groupId>
    <artifactId>java-base-parent</artifactId>
    <version>15.4</version>
    <packaging>pom</packaging>
    <name>java-base-parent</name>
    <description>Parent pom for java projects</description>
    <url>https://github.com/yusiwen/java-base-parent</url>
    <inceptionYear>2021</inceptionYear>
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>
    <scm>
        <connection>scm:git:ssh://git@github.com/yusiwen/java-base-parent.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/yusiwen/java-base-parent.git</developerConnection>
        <url>https://github.com/yusiwen/java-base-parent</url>
        <tag>v15.4</tag>
    </scm>
    <developers>
        <developer>
            <id>yusiwen</id>
            <name>Siwen Yu</name>
            <email>yusiwen@gmail.com</email>
        </developer>
    </developers>
    <issueManagement>
        <system>Github</system>
        <url>https://github.com/yusiwen/java-base-parent/issues</url>
    </issueManagement>
    <ciManagement>
        <system>travis-ci</system>
        <url>https://travis-ci.org/yusiwen/java-base-parent</url>
    </ciManagement>
    <properties>
        <!-- Copyright -->
        <copyright>2022</copyright>
        <!-- Maven minimum version -->
        <maven.min-version>3.6.3</maven.min-version>
        <!-- Maven date configuration -->
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
        <!-- Default JDK version -->
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.testSource>1.8</maven.compiler.testSource>
        <maven.compiler.testTarget>1.8</maven.compiler.testTarget>
        <!-- Signature Settings -->
        <signature.artifact>java18</signature.artifact>
        <signature.version>1.0</signature.version>
        <!-- Default file 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>
        <!-- Indent -->
        <indent.size>4</indent.size>
        <!-- Build -->
        <build.environment>dev</build.environment>
        <!-- Docker build -->
        <docker.build.name>${project.groupId}.${project.artifactId}:${project.version}-${build.environment}</docker.build.name>
        <docker.image.skip>true</docker.image.skip>
        <!-- Maven plugins -->
        <animal-sniffer.plugin>1.22</animal-sniffer.plugin>
        <dependency-check-maven.version>8.1.2</dependency-check-maven.version>
        <directory-maven-plugin.version>1.0</directory-maven-plugin.version>
        <exec-maven-plugin.version>3.1.0</exec-maven-plugin.version>
        <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>
        <maven-resources-plugin.version>3.3.0</maven-resources-plugin.version>
        <maven-assembly-plugin.version>3.5.0</maven-assembly-plugin.version>
        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
        <maven-javadoc-plugin.version>3.5.0</maven-javadoc-plugin.version>
        <maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version>
        <maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version>
        <maven-release-plugin.version>3.0.0-M7</maven-release-plugin.version>
        <maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
        <maven-clean-plugin.version>3.2.0</maven-clean-plugin.version>
        <!-- checks -->
        <error-prone.version>2.18.0</error-prone.version>
        <modernizer.plugin>2.5.0</modernizer.plugin>
        <maven-checkstyle-plugin.version>3.2.1</maven-checkstyle-plugin.version>
        <!--checkstyle check插件 -->
        <checkstyle.version>10.12.1</checkstyle.version>
        <findsecbugs.version>1.12.0</findsecbugs.version>
        <sb-contrib.version>7.4.7</sb-contrib.version>
        <bug-pattern.version>1.5.0</bug-pattern.version>
        <spotbugs-maven-plugin.version>4.7.3.5</spotbugs-maven-plugin.version>
        <spotbugs.version>4.7.3</spotbugs.version>
        <properties-maven-plugin.version>1.0.0</properties-maven-plugin.version>
        <maven-pmd-plugin.version>3.12.0</maven-pmd-plugin.version>
        <p3c-pmd.version>2.1.1</p3c-pmd.version>
        <build-helper-maven-plugin.version>3.3.0</build-helper-maven-plugin.version>
        <maven-build-helper.version>1.5.0</maven-build-helper.version>
        <jacoco.version>0.8.8</jacoco.version>
        <sonar-maven-plugin.version>3.9.1.2184</sonar-maven-plugin.version>
        <!-- test -->
        <surefire.plugin>3.0.0</surefire.plugin>
        <!-- site -->
        <doxia.version>1.12.0</doxia.version>
        <fluido.version>1.11.2</fluido.version>
        <site.plugin>3.12.1</site.plugin>
        <wagon-git.version>2.0.4</wagon-git.version>
        <!-- report -->
        <changelog.plugin>2.3</changelog.plugin>
        <changes.plugin>2.12.1</changes.plugin>
        <javancss.plugin>2.1</javancss.plugin>
        <jdepend.plugin>2.0</jdepend.plugin>
        <maven-jxr-plugin.version>3.3.0</maven-jxr-plugin.version>
        <project-info.plugin>3.4.5</project-info.plugin>
        <taglist.plugin>3.0.0</taglist.plugin>
        <versions.plugin>2.15.0</versions.plugin>
        <!-- build -->
        <antrun-plugin.version>3.1.0</antrun-plugin.version>
        <docker-maven-plugin.version>0.43.0</docker-maven-plugin.version>
        <git-commit.plugin>4.9.10</git-commit.plugin>
        <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
        <maven-war-plugin.version>3.3.2</maven-war-plugin.version>
        <!-- format -->
        <formatter.plugin>2.22.0</formatter.plugin>
        <impsort.plugin>1.8.0</impsort.plugin>
        <license.plugin>4.1</license.plugin>
        <license-git.version>4.1</license-git.version>
        <tidy.plugin>1.2.0</tidy.plugin>
        <whitespace.plugin>1.0.5</whitespace.plugin>
        <xml-format.plugin>3.2.2</xml-format.plugin>
        <!-- others -->
        <enforcer.plugin>3.2.1</enforcer.plugin>
        <flyway-maven-plugin.version>9.15.2</flyway-maven-plugin.version>
        <htmlcompressor.plugin>1.8.0</htmlcompressor.plugin>
        <htmlcompressor.version>1.8.0</htmlcompressor.version>
        <wagon.plugin>2.0.2</wagon.plugin>
        <wagon-ssh.version>3.5.3</wagon-ssh.version>
        <yuicompressor.plugin>1.5.1</yuicompressor.plugin>
        <yuicompressor.version>2.4.8</yuicompressor.version>
        <!-- git -->
        <git-build-hook-plugin.version>3.4.1</git-build-hook-plugin.version>
        <!-- Spring boot plugin -->
        <spring-boot-maven-plugin.version>2.7.9</spring-boot-maven-plugin.version>
        <spring-boot-jar-name>${project.name}-${project.version}</spring-boot-jar-name>
        <!-- Logging -->
        <log4j2.version>2.20.0</log4j2.version>
        <slf4j.version>1.7.36</slf4j.version>
        <logback.version>1.2.11</logback.version>
        <!-- Lombok -->
        <lombok.version>1.18.26</lombok.version>
        <!-- Hutool -->
        <hutool.version>5.8.20</hutool.version>
        <!-- Guava -->
        <guava.version>31.1-jre</guava.version>
    </properties>
    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.commonjava.maven.plugins</groupId>
                <!-- 用来生成顶级模块的绝对路径properties,提供其他插件使用-->
                <artifactId>directory-maven-plugin</artifactId>
                <version>${directory-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>directories</id>
                        <goals>
                            <!-- 顶级模块的绝对路径-->
                            <goal>highest-basedir</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <!-- 顶级模块的绝对路径properties-->
                            <property>top.my.basedir</property>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>${maven-checkstyle-plugin.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${checkstyle.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>cn.yusiwen</groupId>
                        <artifactId>maven-build-helper</artifactId>
                        <version>${maven-build-helper.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>checkstyle-validation</id>
                        <phase>compile</phase>
                        <configuration>
                            <violationSeverity>warn</violationSeverity>
                            <!--suppress UnresolvedMavenProperty -->
                            <configLocation>checkstyle.xml</configLocation>
                            <includeTestSourceDirectory>false</includeTestSourceDirectory>
                            <inputEncoding>UTF-8</inputEncoding>
                            <consoleOutput>true</consoleOutput>
                            <failOnViolation>true</failOnViolation>
                            <failsOnError>true</failsOnError>
                            <excludes>**/enums/*Enum.java,**/Launcher.java,**/*Application.java</excludes>
                        </configuration>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>${maven-pmd-plugin.version}</version>
                <configuration>
                    <linkXRef>false</linkXRef>
                    <aggregate>true</aggregate>
                    <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                    <targetJdk>${java.version}</targetJdk>
                    <printFailingErrors>true</printFailingErrors>
                    <failurePriority>2</failurePriority>
                    <rulesets>
                        <!--由checkstyle检查 <ruleset>rulesets/java/ali-comment.xml</ruleset>-->
                        <ruleset>rulesets/java/ali-concurrent.xml</ruleset>
                        <!--由checkstyle检查 <ruleset>rulesets/java/ali-constant.xml</ruleset>-->
                        <ruleset>rulesets/java/ali-exception.xml</ruleset>
                        <ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
                        <ruleset>rulesets/java/ali-naming.xml</ruleset>
                        <ruleset>rulesets/java/ali-oop.xml</ruleset>
                        <ruleset>rulesets/java/ali-orm.xml</ruleset>
                        <ruleset>rulesets/java/ali-other.xml</ruleset>
                        <ruleset>rulesets/java/ali-set.xml</ruleset>
                    </rulesets>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.alibaba.p3c</groupId>
                        <artifactId>p3c-pmd</artifactId>
                        <version>${p3c-pmd.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <!-- findbugs插件 -->
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <version>${spotbugs-maven-plugin.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>cn.yusiwen</groupId>
                        <artifactId>maven-build-helper</artifactId>
                        <version>${maven-build-helper.version}</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <!-- 设置分析工作的等级，可以为Min、Default和Max -->
                    <effort>Max</effort>
                    <!-- Low、Medium和High (Low最严格) -->
                    <threshold>Medium</threshold>
                    <!--发现错误则中断构建-->
                    <failOnError>true</failOnError>
                    <!--不检查test代码 -->
                    <includeTests>false</includeTests>
                    <!--findbugs需要忽略的错误的配置文件-->
                    <!--suppress UnresolvedMavenProperty -->
                    <excludeFilterFile>findbugs-exclude-filter.xml</excludeFilterFile>
                    <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>
                <executions>
                    <execution>
                        <id>run-findbugs</id>
                        <!-- validate 阶段触发执行findbugs检查，比如执行 mvn clean package -->
                        <phase>compile</phase>
                        <goals>
                            <goal>check</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>
                        <phase>pre-clean</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>enforce-site</id>
                        <phase>pre-site</phase>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.gaul</groupId>
                <artifactId>modernizer-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>modernizer</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>modernizer</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot-maven-plugin.version}</version>
                    <configuration>
                        <finalName>${spring-boot-jar-name}</finalName>
                        <fork>true</fork>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${maven-clean-plugin.version}</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${maven-resources-plugin.version}</version>
                    <configuration>
                        <encoding>${project.build.resourceEncoding}</encoding>
                        <delimiters>
                            <!-- 使用${*}作为变量分隔符 -->
                            <delimiter>${*}</delimiter>
                        </delimiters>
                        <!--禁止使用默认： 默认delimiter包括 ${*}和@ -->
                        <useDefaultDelimiters>false</useDefaultDelimiters>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <version>${maven-javadoc-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <version>${maven-source-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>attach-sources</id>
                            <goals>
                                <goal>jar-no-fork</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>${exec-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>${maven-gpg-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>sign-artifacts</id>
                            <phase>verify</phase>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>${maven-deploy-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-release-plugin</artifactId>
                    <version>${maven-release-plugin.version}</version>
                    <configuration>
                        <tagNameFormat>v@{project.version}</tagNameFormat>
                        <scmCommentPrefix>release</scmCommentPrefix>
                        <scmDevelopmentCommitComment>@{prefix}: prepare for next development iteration</scmDevelopmentCommitComment>
                        <scmReleaseCommitComment>@{prefix}: release @{releaseLabel}</scmReleaseCommitComment>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <version>${enforcer.plugin}</version>
                    <configuration>
                        <rules>
                            <requireMavenVersion>
                                <version>[${maven.min-version},)</version>
                            </requireMavenVersion>
                        </rules>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>${build-helper-maven-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>timestamp-property</id>
                            <goals>
                                <goal>timestamp-property</goal>
                            </goals>
                            <configuration>
                                <name>current.time</name>
                                <pattern>yyyyMMdd</pattern>
                                <timeZone>GMT+8</timeZone>
                                <locale>zh_CN</locale>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${surefire.plugin}</version>
                    <configuration>
                        <testFailureIgnore>true</testFailureIgnore>
                        <includes>
                            <include>**/*Test.java</include>
                        </includes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>${jacoco.version}</version>
                    <configuration>
                        <excludes>
                            <exclude>**/po/**</exclude>
                            <exclude>*/dto/**</exclude>
                            <exclude>**/vo/**</exclude>
                            <exclude>**/feign/**</exclude>
                            <exclude>**/enums/**</exclude>
                            <exclude>**/config/**</exclude>
                            <exclude>**/utils/**</exclude>
                            <exclude>**/domain/**</exclude>
                        </excludes>
                        <destFile>${project.build.directory}/coverage-reports/jacoco-unit.exec</destFile>
                        <dataFile>${project.build.directory}/coverage-reports/jacoco-unit.exec</dataFile>
                        <!-- rules里面指定覆盖规则 -->
                        <rules>
                            <rule implementation="org.jacoco.maven.RuleConfiguration">
                                <element>BUNDLE</element>
                                <limits>
                                    <!-- 方法覆盖率到100% -->
                                    <limit implementation="org.jacoco.report.check.Limit">
                                        <counter>METHOD</counter>
                                        <value>MISSEDCOUNT</value>
                                        <maximum>0</maximum>
                                    </limit>
                                    <!-- 指令覆盖率到90% -->
                                    <limit implementation="org.jacoco.report.check.Limit">
                                        <counter>INSTRUCTION</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.90</minimum>
                                    </limit>
                                    <!-- 行覆盖率到90% -->
                                    <limit implementation="org.jacoco.report.check.Limit">
                                        <counter>LINE</counter>
                                        <value>COVEREDRATIO</value>
                                        <minimum>0.90</minimum>
                                    </limit>
                                    <!-- 指定类覆盖到100%，不能遗失任何类 -->
                                    <limit implementation="org.jacoco.report.check.Limit">
                                        <counter>CLASS</counter>
                                        <value>MISSEDCOUNT</value>
                                        <maximum>0</maximum>
                                    </limit>
                                </limits>
                            </rule>
                        </rules>
                    </configuration>
                    <executions>
                        <execution>
                            <id>jacoco-initialize</id>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>jacoco-site</id>
                            <phase>test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.flywaydb</groupId>
                    <artifactId>flyway-maven-plugin</artifactId>
                    <version>${flyway-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>${antrun-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>${docker-maven-plugin.version}</version>
                    <configuration>
                        <!--suppress UnresolvedMavenProperty -->
                        <skip>${docker.image.skip}</skip>
                        <images>
                            <image>
                                <!--suppress UnresolvedMavenProperty -->
                                <name>${docker.build.name}</name>
                                <build>
                                    <!--suppress UnresolvedMavenProperty -->
                                    <dockerFile>${docker.build.dockerfile}</dockerFile>
                                    <contextDir>${project.basedir}</contextDir>
                                </build>
                            </image>
                        </images>
                    </configuration>
                    <executions>
                        <execution>
                            <id>docker</id>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>registry</id>
                            <phase>deploy</phase>
                            <goals>
                                <goal>push</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- Sonar -->
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>${sonar-maven-plugin.version}</version>
                </plugin>
                <!-- OWASP Vulnerabilities check -->
                <plugin>
                    <groupId>org.owasp</groupId>
                    <artifactId>dependency-check-maven</artifactId>
                    <version>${dependency-check-maven.version}</version>
                    <configuration>
                        <!-- Disable .net analyzer -->
                        <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
                        <nugetconfAnalyzerEnabled>false</nugetconfAnalyzerEnabled>
                        <nuspecAnalyzerEnabled>false</nuspecAnalyzerEnabled>
                        <!-- Disable node analyzer -->
                        <nodeAnalyzerEnabled>false</nodeAnalyzerEnabled>
                        <nodeAuditAnalyzerEnabled>false</nodeAuditAnalyzerEnabled>
                        <!-- Disable python analyzer -->
                        <pyDistributionAnalyzerEnabled>false</pyDistributionAnalyzerEnabled>
                        <pyPackageAnalyzerEnabled>false</pyPackageAnalyzerEnabled>
                        <pipAnalyzerEnabled>false</pipAnalyzerEnabled>
                        <pipfileAnalyzerEnabled>false</pipfileAnalyzerEnabled>
                        <!-- Disable ruby analyzer -->
                        <rubygemsAnalyzerEnabled>false</rubygemsAnalyzerEnabled>
                        <cmakeAnalyzerEnabled>false</cmakeAnalyzerEnabled>
                        <autoconfAnalyzerEnabled>false</autoconfAnalyzerEnabled>
                        <composerAnalyzerEnabled>false</composerAnalyzerEnabled>
                        <cpanfileAnalyzerEnabled>false</cpanfileAnalyzerEnabled>
                        <yarnAuditAnalyzerEnabled>false</yarnAuditAnalyzerEnabled>
                        <pnpmAuditAnalyzerEnabled>false</pnpmAuditAnalyzerEnabled>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.gaul</groupId>
                    <artifactId>modernizer-maven-plugin</artifactId>
                    <version>${modernizer.plugin}</version>
                    <configuration>
                        <javaVersion>${maven.compiler.target}</javaVersion>
                    </configuration>
                </plugin>
                <!--  Formatter -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>tidy-maven-plugin</artifactId>
                    <version>${tidy.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>net.revelc.code.formatter</groupId>
                    <artifactId>formatter-maven-plugin</artifactId>
                    <version>${formatter.plugin}</version>
                    <dependencies>
                        <dependency>
                            <groupId>cn.yusiwen</groupId>
                            <artifactId>maven-build-helper</artifactId>
                            <version>${maven-build-helper.version}</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <!--suppress UnresolvedMavenProperty -->
                        <configFile>p3c-formatter-${indent.size}spaces.xml</configFile>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>net.revelc.code</groupId>
                    <artifactId>impsort-maven-plugin</artifactId>
                    <version>${impsort.plugin}</version>
                    <configuration>
                        <groups>com,java,javax,lombok,mockit,net,org</groups>
                        <staticGroups>java,*</staticGroups>
                        <removeUnused>true</removeUnused>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>cn.yusiwen</groupId>
                    <artifactId>whitespace-maven-plugin</artifactId>
                    <version>${whitespace.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>au.com.acegi</groupId>
                    <artifactId>xml-format-maven-plugin</artifactId>
                    <version>${xml-format.plugin}</version>
                    <configuration>
                        <indentSize>${indent.size}</indentSize>
                        <lineLength>120</lineLength>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.mycila</groupId>
                    <artifactId>license-maven-plugin</artifactId>
                    <version>${license.plugin}</version>
                    <configuration>
                        <!--suppress UnresolvedMavenProperty -->
                        <header>${license.header}</header>
                        <excludes>
                            <exclude>**/*.lck</exclude>
                            <exclude>**/*.log</exclude>
                            <exclude>**/*maven-wrapper.properties</exclude>
                            <exclude>**/*MavenWrapperDownloader.java</exclude>
                            <exclude>.factorypath</exclude>
                            <exclude>.gitattributes</exclude>
                            <exclude>.gitignore</exclude>
                            <exclude>.format</exclude>
                            <exclude>.compress</exclude>
                            <exclude>.error-prone</exclude>
                            <exclude>LICENSE</exclude>
                            <exclude>LICENSE_HEADER</exclude>
                            <exclude>LICENSE.txt</exclude>
                            <exclude>LICENSE.TXT</exclude>
                            <exclude>license.txt</exclude>
                            <exclude>mvnw</exclude>
                            <exclude>mvnw.cmd</exclude>
                        </excludes>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.mycila</groupId>
                            <artifactId>license-maven-plugin-git</artifactId>
                            <version>${license-git.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <!-- Wagon -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>wagon-maven-plugin</artifactId>
                    <version>${wagon.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>animal-sniffer-maven-plugin</artifactId>
                    <version>${animal-sniffer.plugin}</version>
                    <configuration>
                        <signature>
                            <groupId>org.codehaus.mojo.signature</groupId>
                            <artifactId>${signature.artifact}</artifactId>
                            <version>${signature.version}</version>
                        </signature>
                    </configuration>
                </plugin>
                <!-- Build Plugins -->
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-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>
                <!-- Packaging types / tools -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>${maven-jar-plugin.version}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Build-Time>${maven.build.timestamp}</Build-Time>
                                <Copyright>${copyright}</Copyright>
                                <!--suppress UnresolvedMavenProperty -->
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <Os-Name>${os.name}</Os-Name>
                                <Os-Arch>${os.arch}</Os-Arch>
                                <Os-Version>${os.version}</Os-Version>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                            </manifestEntries>
                        </archive>
                        <skipIfEmpty>true</skipIfEmpty>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>${maven-assembly-plugin.version}</version>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>${maven-war-plugin.version}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Build-Time>${maven.build.timestamp}</Build-Time>
                                <Copyright>${copyright}</Copyright>
                                <!--suppress UnresolvedMavenProperty -->
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <Os-Name>${os.name}</Os-Name>
                                <Os-Arch>${os.arch}</Os-Arch>
                                <Os-Version>${os.version}</Os-Version>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</groupId>
                    <artifactId>htmlcompressor-maven-plugin</artifactId>
                    <version>${htmlcompressor.plugin}</version>
                    <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>net.alchim31.maven</groupId>
                    <artifactId>yuicompressor-maven-plugin</artifactId>
                    <version>${yuicompressor.plugin}</version>
                    <dependencies>
                        <dependency>
                            <groupId>com.yahoo.platform.yui</groupId>
                            <artifactId>yuicompressor</artifactId>
                            <version>${yuicompressor.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <!-- Site -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>${site.plugin}</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            </manifest>
                            <manifestEntries>
                                <Build-Time>${maven.build.timestamp}</Build-Time>
                                <Copyright>${copyright}</Copyright>
                                <!--suppress UnresolvedMavenProperty -->
                                <Git-Revision>${git.commit.id}</Git-Revision>
                                <Os-Name>${os.name}</Os-Name>
                                <Os-Arch>${os.arch}</Os-Arch>
                                <Os-Version>${os.version}</Os-Version>
                                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                            </manifestEntries>
                        </archive>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.apache.maven.doxia</groupId>
                            <artifactId>doxia-module-markdown</artifactId>
                            <version>${doxia.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>net.trajano.wagon</groupId>
                            <artifactId>wagon-git</artifactId>
                            <version>${wagon-git.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.apache.maven.wagon</groupId>
                            <artifactId>wagon-ssh</artifactId>
                            <version>${wagon-ssh.version}</version>
                        </dependency>
                        <!-- For reporting only of versions -->
                        <dependency>
                            <groupId>org.apache.maven.skins</groupId>
                            <artifactId>maven-fluido-skin</artifactId>
                            <version>${fluido.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
                <!-- Report Only -->
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>javancss-maven-plugin</artifactId>
                    <version>${javancss.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>jdepend-maven-plugin</artifactId>
                    <version>${jdepend.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-changelog-plugin</artifactId>
                    <version>${changelog.plugin}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-changes-plugin</artifactId>
                    <version>${changes.plugin}</version>
                    <configuration>
                        <githubAPIScheme>https</githubAPIScheme>
                        <githubAPIPort>443</githubAPIPort>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jxr-plugin</artifactId>
                    <version>${maven-jxr-plugin.version}</version>
                </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-surefire-report-plugin</artifactId>
                    <version>${surefire.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>
                <plugin>
                    <groupId>com.rudikershaw.gitbuildhook</groupId>
                    <artifactId>git-build-hook-maven-plugin</artifactId>
                    <version>${git-build-hook-plugin.version}</version>
                    <configuration>
                        <installHooks>
                            <commit-msg>hooks/commit-msg</commit-msg>
                            <pre-commit>hooks/pre-commit</pre-commit>
                        </installHooks>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>cn.yusiwen</groupId>
                            <artifactId>maven-build-helper</artifactId>
                            <version>${maven-build-helper.version}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <phase>validate</phase>
                            <goals>
                                <goal>install</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-ssh</artifactId>
                <version>${wagon-ssh.version}</version>
            </extension>
        </extensions>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-annotations</artifactId>
                <version>${spotbugs.version}</version>
            </dependency>
            <!-- Logging -->
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-bom</artifactId>
                <version>${log4j2.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jul-to-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-ext</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-jcl</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-jdk14</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-nop</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>${slf4j.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-access</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <!-- Lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!-- Hutool -->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>
            <!-- Guava -->
            <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>${guava.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.gaul</groupId>
            <artifactId>modernizer-maven-annotations</artifactId>
            <version>${modernizer.plugin}</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
    </dependencies>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-changelog-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-changes-plugin</artifactId>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>github-report</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
            <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>
            </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.codehaus.mojo</groupId>
                <artifactId>javancss-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jdepend-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>jar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <docker.image.skip>true</docker.image.skip>
            </properties>
        </profile>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>docker</id>
            <properties>
                <docker.image.skip>false</docker.image.skip>
            </properties>
        </profile>
        <profile>
            <id>git-hook</id>
            <activation>
                <file>
                    <exists>.git</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.rudikershaw.gitbuildhook</groupId>
                        <artifactId>git-build-hook-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>compression</id>
            <activation>
                <file>
                    <exists>.compress</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.github.hazendaz.maven</groupId>
                        <artifactId>htmlcompressor-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <phase>compile</phase>
                                <goals>
                                    <goal>html</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <compressCss>true</compressCss>
                            <compressJavaScript>true</compressJavaScript>
                            <javascriptHtmlSprite>false</javascriptHtmlSprite>
                            <yuiJsNoMunge>true</yuiJsNoMunge>
                            <removeIntertagSpaces>true</removeIntertagSpaces>
                            <srcFolder>${project.basedir}/src/main/resources</srcFolder>
                            <targetFolder>${project.basedir}/target/classes</targetFolder>
                            <fileExt>
                                <fileExt>html</fileExt>
                                <fileExt>xhtml</fileExt>
                                <fileExt>xml</fileExt>
                            </fileExt>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>yuicompressor-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <phase>compile</phase>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <nomunge>true</nomunge>
                            <nosuffix>true</nosuffix>
                            <excludes>
                                <exclude>**/*.min.js</exclude>
                                <exclude>**/*.min.css</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>format</id>
            <activation>
                <file>
                    <exists>.format</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>cn.yusiwen</groupId>
                        <artifactId>whitespace-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>process-sources</phase>
                                <goals>
                                    <goal>trim</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>au.com.acegi</groupId>
                        <artifactId>xml-format-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>xml-format</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>license-header</id>
            <activation>
                <file>
                    <exists>LICENSE_HEADER</exists>
                </file>
            </activation>
            <properties>
                <license.header>LICENSE_HEADER</license.header>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.mycila</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>compile</phase>
                                <goals>
                                    <goal>format</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>license-txt</id>
            <activation>
                <file>
                    <exists>license.txt</exists>
                </file>
            </activation>
            <properties>
                <license.header>license.txt</license.header>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.mycila</groupId>
                        <artifactId>license-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>compile</phase>
                                <goals>
                                    <goal>format</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>sort</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>tidy-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>pom</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>error-prone-common</id>
            <activation>
                <file>
                    <exists>.error-prone</exists>
                </file>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>com.google.errorprone</groupId>
                    <artifactId>error_prone_annotations</artifactId>
                    <version>${error-prone.version}</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>jdk8</id>
            <activation>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <checkstyle.version>9.3</checkstyle.version>
                <formatter.plugin>2.16.0</formatter.plugin>
                <impsort.plugin>1.6.2</impsort.plugin>
            </properties>
        </profile>
        <profile>
            <id>jdk8-error-prone</id>
            <activation>
                <jdk>1.8</jdk>
                <file>
                    <exists>.error-prone</exists>
                </file>
            </activation>
            <properties>
                <!-- using github.com/google/error-prone-javac is required when running on JDK 8 -->
                <javac.version>9+181-r4173-1</javac.version>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <fork>true</fork>
                            <compilerArgs combine.children="append">
                                <arg>-J-Xbootclasspath/p:${settings.localRepository}/com/google/errorprone/javac/${javac.version}/javac-${javac.version}.jar</arg>
                            </compilerArgs>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>com.google.errorprone</groupId>
                                <artifactId>javac</artifactId>
                                <version>${javac.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>jdk9+</id>
            <activation>
                <jdk>[9,18)</jdk>
            </activation>
            <properties>
                <!-- JAXB -->
                <javax.activation.version>1.2.0</javax.activation.version>
                <jaxb.api.version>2.3.0</jaxb.api.version>
                <lombok.version>1.18.6</lombok.version>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>com.sun.activation</groupId>
                    <artifactId>javax.activation</artifactId>
                    <version>${javax.activation.version}</version>
                </dependency>
                <dependency>
                    <groupId>javax.xml.bind</groupId>
                    <artifactId>jaxb-api</artifactId>
                    <version>${jaxb.api.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-core</artifactId>
                    <version>${jaxb.api.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.xml.bind</groupId>
                    <artifactId>jaxb-impl</artifactId>
                    <version>${jaxb.api.version}</version>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>jdk9-error-prone</id>
            <activation>
                <jdk>[9,16)</jdk>
                <file>
                    <exists>.error-prone</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <compilerArgs>
                                <arg>-XDcompilePolicy=simple</arg>
                                <arg>-Xplugin:ErrorProne</arg>
                            </compilerArgs>
                            <annotationProcessorPaths>
                                <path>
                                    <groupId>com.google.errorprone</groupId>
                                    <artifactId>error_prone_core</artifactId>
                                    <version>${error-prone.version}</version>
                                </path>
                                <!-- Other annotation processors go here.
                                If 'annotationProcessorPaths' is set, processors will no longer be
                                discovered on the regular -classpath; see also 'Using Error Prone
                                together with other annotation processors' below. -->
                            </annotationProcessorPaths>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>jdk16-error-prone</id>
            <activation>
                <jdk>[16,)</jdk>
                <file>
                    <exists>.error-prone</exists>
                </file>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <fork>true</fork>
                            <compilerArgs>
                                <arg>-XDcompilePolicy=simple</arg>
                                <arg>-Xplugin:ErrorProne</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
                                <arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
                                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
                                <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                            </compilerArgs>
                            <annotationProcessorPaths>
                                <path>
                                    <groupId>com.google.errorprone</groupId>
                                    <artifactId>error_prone_core</artifactId>
                                    <version>${error-prone.version}</version>
                                </path>
                                <!-- Other annotation processors go here.
                                If 'annotationProcessorPaths' is set, processors will no longer be
                                discovered on the regular -classpath; see also 'Using Error Prone
                                together with other annotation processors' below. -->
                            </annotationProcessorPaths>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>eclipse</id>
            <activation>
                <property>
                    <name>m2e.version</name>
                </property>
            </activation>
            <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>
                            <version>1.0.0</version>
                            <configuration>
                                <lifecycleMappingMetadata>
                                    <pluginExecutions>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.codehaus.mojo</groupId>
                                                <artifactId>build-helper-maven-plugin</artifactId>
                                                <versionRange>[${build-helper-maven-plugin.version},)</versionRange>
                                                <goals>
                                                    <goal>validate</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.commonjava.maven.plugins</groupId>
                                                <artifactId>directory-maven-plugin</artifactId>
                                                <versionRange>[${directory-maven-plugin.version},)</versionRange>
                                                <goals>
                                                    <goal>validate</goal>
                                                    <goal>highest-basedir</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>com.github.hazendaz.maven</groupId>
                                                <artifactId>htmlcompressor-maven-plugin</artifactId>
                                                <versionRange>[${htmlcompressor.plugin},)</versionRange>
                                                <goals>
                                                    <goal>html</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>net.alchim31.maven</groupId>
                                                <artifactId>yuicompressor-maven-plugin</artifactId>
                                                <versionRange>[${yuicompressor.plugin},)</versionRange>
                                                <goals>
                                                    <goal>compress</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>com.github.spotbugs</groupId>
                                                <artifactId>spotbugs-maven-plugin</artifactId>
                                                <versionRange>[${spotbugs-maven-plugin.version},)</versionRange>
                                                <goals>
                                                    <goal>check</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>net.revelc.code.formatter</groupId>
                                                <artifactId>formatter-maven-plugin</artifactId>
                                                <versionRange>[${formatter.plugin},)</versionRange>
                                                <goals>
                                                    <goal>format</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                        <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>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>cn.yusiwen</groupId>
                                                <artifactId>whitespace-maven-plugin</artifactId>
                                                <versionRange>[1.0.5,)</versionRange>
                                                <goals>
                                                    <goal>trim</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                        <pluginExecution>
                                            <pluginExecutionFilter>
                                                <groupId>org.apache.maven.plugins</groupId>
                                                <artifactId>maven-enforcer-plugin</artifactId>
                                                <versionRange>[${enforcer.plugin},)</versionRange>
                                                <goals>
                                                    <goal>enforce</goal>
                                                </goals>
                                            </pluginExecutionFilter>
                                            <action>
                                                <ignore/>
                                            </action>
                                        </pluginExecution>
                                    </pluginExecutions>
                                </lifecycleMappingMetadata>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
    </profiles>
</project>
