<?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>19</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>
    <developers>
        <developer>
            <id>yusiwen</id>
            <name>Siwen Yu</name>
            <email>yusiwen@gmail.com</email>
        </developer>
    </developers>
    <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>
        <tag>v19</tag>
        <url>https://github.com/yusiwen/java-base-parent</url>
    </scm>
    <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>2021-2025</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>17</java.version>
        <java.release.version>17</java.release.version>
        <java.test.version>17</java.test.version>
        <java.test.release.version>17</java.test.release.version>
        <toolchain.jdk.version>[17,)</toolchain.jdk.version>
        <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>
        <!-- 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>
        <!-- OSGi configuration properties -->
        <osgi.symbolicName>${project.groupId}.${project.artifactId}</osgi.symbolicName>
        <osgi.export>${project.groupId}.*;version=${project.version};-noimport:=true</osgi.export>
        <osgi.import>*</osgi.import>
        <osgi.dynamicImport />
        <osgi.private />
        <!-- 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.24</animal-sniffer.plugin>
        <dependency-check-maven.version>12.1.1</dependency-check-maven.version>
        <directory-maven-plugin.version>1.0</directory-maven-plugin.version>
        <exec-maven-plugin.version>3.5.0</exec-maven-plugin.version>
        <maven-toolchains-plugin.version>3.2.0</maven-toolchains-plugin.version>
        <maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
        <maven-resources-plugin.version>3.3.1</maven-resources-plugin.version>
        <maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
        <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
        <maven-javadoc-plugin.version>3.11.2</maven-javadoc-plugin.version>
        <maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
        <maven-gpg-plugin.version>3.2.7</maven-gpg-plugin.version>
        <maven-release-plugin.version>3.1.1</maven-release-plugin.version>
        <central-publishing-maven-plugin.version>0.7.0</central-publishing-maven-plugin.version>
        <maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
        <maven-install-plugin.version>3.1.4</maven-install-plugin.version>
        <maven-clean-plugin.version>3.4.1</maven-clean-plugin.version>
        <!-- checks -->
        <error-prone.version>2.38.0</error-prone.version>
        <modernizer.plugin>3.1.0</modernizer.plugin>
        <maven-checkstyle-plugin.version>3.6.0</maven-checkstyle-plugin.version>
        <!--checkstyle check插件 -->
        <checkstyle.version>10.24.0</checkstyle.version>
        <findsecbugs.version>1.14.0</findsecbugs.version>
        <sb-contrib.version>7.6.9</sb-contrib.version>
        <bug-pattern.version>1.5.0</bug-pattern.version>
        <spotbugs-maven-plugin.version>4.9.3.0</spotbugs-maven-plugin.version>
        <spotbugs.version>4.9.3</spotbugs.version>
        <properties-maven-plugin.version>1.0.0</properties-maven-plugin.version>
        <maven-pmd-plugin.version>3.21.2</maven-pmd-plugin.version>
        <p3c-pmd.version>2.2.1.0x</p3c-pmd.version>
        <build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>
        <maven-build-helper.version>1.5.4</maven-build-helper.version>
        <jacoco.version>0.8.13</jacoco.version>
        <sonar-maven-plugin.version>5.1.0.4751</sonar-maven-plugin.version>
        <!-- test -->
        <surefire.plugin>3.5.3</surefire.plugin>
        <!-- site -->
        <doxia.version>2.0.0</doxia.version>
        <fluido.version>2.1.0</fluido.version>
        <site.plugin>3.21.0</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.1</jdepend.plugin>
        <maven-jxr-plugin.version>3.6.0</maven-jxr-plugin.version>
        <project-info.plugin>3.9.0</project-info.plugin>
        <taglist.plugin>3.2.1</taglist.plugin>
        <versions.plugin>2.18.0</versions.plugin>
        <!-- build -->
        <antrun-plugin.version>3.1.0</antrun-plugin.version>
        <docker-maven-plugin.version>0.46.0</docker-maven-plugin.version>
        <git-commit.plugin>4.9.10</git-commit.plugin>
        <maven-jar-plugin.version>3.4.2</maven-jar-plugin.version>
        <maven-war-plugin.version>3.4.0</maven-war-plugin.version>
        <!-- format -->
        <formatter.plugin>2.26.0</formatter.plugin>
        <impsort.plugin>1.12.0</impsort.plugin>
        <sortpom.plugin>4.0.0</sortpom.plugin>
        <tidy.plugin>1.4.0</tidy.plugin>
        <whitespace.plugin>1.5.0</whitespace.plugin>
        <xml-format.plugin>4.1.0</xml-format.plugin>
        <rewrite.plugin>6.7.0</rewrite.plugin>
        <!-- others -->
        <bnd.version>7.1.0</bnd.version>
        <bnd.plugin>7.1.0</bnd.plugin>
        <license.plugin>5.0.0</license.plugin>
        <license-git.version>5.0.0</license-git.version>
        <enforcer.plugin>3.5.0</enforcer.plugin>
        <flyway-maven-plugin.version>11.8.2</flyway-maven-plugin.version>
        <htmlcompressor.plugin>2.2.0</htmlcompressor.plugin>
        <htmlcompressor.version>2.0.2</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>
        <utility.version>1.0.0-SNAPSHOT</utility.version>
        <lombok.version>1.18.38</lombok.version>
        <!-- git -->
        <git-build-hook-plugin.version>3.5.0</git-build-hook-plugin.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-annotations</artifactId>
                <version>${spotbugs.version}</version>
            </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>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.gaul</groupId>
            <artifactId>modernizer-maven-annotations</artifactId>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>cn.yusiwen.maven.plugins</groupId>
                    <artifactId>utility-maven-plugin</artifactId>
                    <version>${utility.version}</version>
                </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>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <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>
                        </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>
                        <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
                        <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>
                    <dependencies>
                        <dependency>
                            <groupId>com.xenoamess.p3c</groupId>
                            <artifactId>p3c-pmd</artifactId>
                            <version>${p3c-pmd.version}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <phase>compile</phase>
                        </execution>
                    </executions>
                </plugin>
                <!-- findbugs插件 -->
                <plugin>
                    <groupId>com.github.spotbugs</groupId>
                    <artifactId>spotbugs-maven-plugin</artifactId>
                    <version>${spotbugs-maven-plugin.version}</version>
                    <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>
                    <dependencies>
                        <dependency>
                            <groupId>cn.yusiwen</groupId>
                            <artifactId>maven-build-helper</artifactId>
                            <version>${maven-build-helper.version}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>run-findbugs</id>
                            <goals>
                                <goal>check</goal>
                            </goals>
                            <!-- validate 阶段触发执行findbugs检查，比如执行 mvn clean package -->
                            <phase>compile</phase>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>${maven-clean-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>${maven-install-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-toolchains-plugin</artifactId>
                    <version>${maven-toolchains-plugin.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>select-jdk-toolchain</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <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>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                            <phase>verify</phase>
                        </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.sonatype.central</groupId>
                    <artifactId>central-publishing-maven-plugin</artifactId>
                    <version>${central-publishing-maven-plugin.version}</version>
                    <extensions>true</extensions>
                    <configuration>
                        <publishingServerId>central-portal</publishingServerId>
                    </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>
                            <goals>
                                <goal>report</goal>
                            </goals>
                            <phase>test</phase>
                        </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>
                            <goals>
                                <goal>build</goal>
                            </goals>
                            <phase>package</phase>
                        </execution>
                        <execution>
                            <id>registry</id>
                            <goals>
                                <goal>push</goal>
                            </goals>
                            <phase>deploy</phase>
                        </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>
                    <configuration>
                        <!--suppress UnresolvedMavenProperty -->
                        <configFile>p3c-formatter-${indent.size}spaces.xml</configFile>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>cn.yusiwen</groupId>
                            <artifactId>maven-build-helper</artifactId>
                            <version>${maven-build-helper.version}</version>
                        </dependency>
                    </dependencies>
                </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>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>${indent.size}</nrOfIndentSpace>
                        <spaceBeforeCloseEmptyElement>true</spaceBeforeCloseEmptyElement>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.github.hazendaz.maven</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>
                        <excludes>
                            <exclude>pom.xml</exclude>
                        </excludes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.openrewrite.maven</groupId>
                    <artifactId>rewrite-maven-plugin</artifactId>
                    <version>${rewrite.plugin}</version>
                    <configuration>
                        <activeRecipes>
                            <recipe>org.openrewrite.java.RemoveUnusedImports</recipe>
                        </activeRecipes>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>biz.aQute.bnd</groupId>
                    <artifactId>bnd-maven-plugin</artifactId>
                    <version>${bnd.plugin}</version>
                    <configuration>
                        <manifestPath>${project.build.directory}/osgi/MANIFEST.MF</manifestPath>
                        <packagingTypes>jar,bundle,maven-plugin,war</packagingTypes>
                        <bnd><![CDATA[
                            // 'nouses' stops the "uses" clauses being added to "Export-Package" manifest entry
                            -nouses: true
                            // 'removeheaders' Stop the JAVA_n_HOME variables from being treated as headers by Bnd if found in settings.xml (obsolete versions removed, if found, cleanup settings.xml)
                            -removeheaders: JAVA_17_HOME,JAVA_21_HOME,JAVA_23_HOME,JAVA_24_HOME,JAVA_25_HOME
                            Bundle-Developers:
                            Bundle-DocURL: ${project.url}
                            Bundle-SymbolicName: ${osgi.symbolicName}
                            DynamicImport-Package: ${osgi.dynamicImport}
                            Export-Package: ${osgi.export}
                            Private-Package: ${osgi.private}
                            Import-Package: ${osgi.import}
                        ]]></bnd>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>biz.aQute.bnd</groupId>
                            <artifactId>biz.aQute.bndlib</artifactId>
                            <version>${bnd.version}</version>
                        </dependency>
                    </dependencies>
                </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>
                                <addBuildEnvironmentEntries>false</addBuildEnvironmentEntries>
                                <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>
                                <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-assembly-plugin</artifactId>
                    <version>${maven-assembly-plugin.version}</version>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>cn.yusiwen</groupId>
                            <artifactId>maven-build-helper</artifactId>
                            <version>${maven-build-helper.version}</version>
                        </dependency>
                    </dependencies>
                </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>
                            <post-commit>hooks/post-commit</post-commit>
                        </installHooks>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>cn.yusiwen</groupId>
                            <artifactId>maven-build-helper</artifactId>
                            <version>${maven-build-helper.version}</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <goals>
                                <goal>install</goal>
                            </goals>
                            <phase>validate</phase>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-toolchains-plugin</artifactId>
            </plugin>
            <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>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
            </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>
            </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>
        </plugins>
        <sourceDirectory>src/main/java</sourceDirectory>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-ssh</artifactId>
                <version>${wagon-ssh.version}</version>
            </extension>
        </extensions>
    </build>
    <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>
                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-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>
                        <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>
                        <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>
                        <configuration>
                            <nomunge>true</nomunge>
                            <nosuffix>true</nosuffix>
                            <excludes>
                                <exclude>**/*.min.js</exclude>
                                <exclude>**/*.min.css</exclude>
                            </excludes>
                        </configuration>
                        <executions>
                            <execution>
                                <id>default-compile</id>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                                <phase>compile</phase>
                            </execution>
                        </executions>
                    </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>org.openrewrite.maven</groupId>
                        <artifactId>rewrite-maven-plugin</artifactId>
                        <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.github.hazendaz.maven</groupId>
                        <artifactId>whitespace-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>trim</goal>
                                </goals>
                                <phase>process-sources</phase>
                            </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>bundle</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>single</goal>
                                </goals>
                                <phase>package</phase>
                                <configuration>
                                    <attach>true</attach>
                                    <appendAssemblyId>false</appendAssemblyId>
                                    <descriptorRefs>
                                        <descriptorRef>base-bundle</descriptorRef>
                                    </descriptorRefs>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>license</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>
                                <goals>
                                    <goal>format</goal>
                                </goals>
                                <phase>compile</phase>
                            </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>
                                <goals>
                                    <goal>pom</goal>
                                </goals>
                                <phase>verify</phase>
                            </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>
                <spotbugs-maven-plugin.version>4.8.6.6</spotbugs-maven-plugin.version>
                <formatter.plugin>2.16.0</formatter.plugin>
                <impsort.plugin>1.6.2</impsort.plugin>
                <flyway-maven-plugin.version>9.22.3</flyway-maven-plugin.version>
                <sonar-maven-plugin.version>3.11.0.3922</sonar-maven-plugin.version>
                <dependency-check-maven.version>10.0.4</dependency-check-maven.version>
                <license.plugin>4.6</license.plugin>
                <license-git.version>4.6</license-git.version>
                <htmlcompressor.plugin>1.7.3</htmlcompressor.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,)</jdk>
            </activation>
            <properties>
                <!-- JAXB -->
                <javax.activation.version>1.2.0</javax.activation.version>
                <jaxb.api.version>2.3.0</jaxb.api.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>[${whitespace.plugin},)</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>
