<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2005-2026 Du Law Office - jExpress, The Summer Boot Framework Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     https://apache.org
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  ~
  -->

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.summerboot</groupId>
    <artifactId>jexpress</artifactId>
    <version>2.7.0</version>
    <packaging>jar</packaging>
    <name>jExpress ${project.version}</name>
    <description>jExpress focuses on addressing non-functional and operational maintainability needs, some of which Spring Boot may not yet provide.</description>
    <url>https://github.com/SummerBootFramework</url>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
            <comments>The jExpress licenses this framework to you under the Apache License, version 2.0 (the "License");
                you may not use this framework except in compliance with the License and you have no policy prohibiting
                employee contributions back to this framework (unless the contributor to this framework is your current
                or retired employee).
            </comments>
        </license>
    </licenses>
    <organization>
        <name>Summer Boot Org</name>
        <url>https://summerboot.org</url>
    </organization>
    <developers>
        <developer>
            <name>IT Development - Dw Law Office</name>
            <email>info@dulawoffice.com</email>
            <url>https://www.dulawoffice.com/</url>
        </developer>
        <developer>
            <name>jExpress Org</name>
            <url>https://jexpress.org/</url>
        </developer>
        <developer>
            <name>Changski Tie Zheng Zhang 张铁铮</name>
            <email>changski_skb@outlook.com</email>
            <url>https://www.linkedin.com/in/changski-zhang-97787b4/</url>
        </developer>
    </developers>
    <scm>
        <connection>sscm:git:git://github.com/SummerBootFramework/jExpress.git</connection>
        <developerConnection>scm:git:ssh://github.com:SummerBootFramework/jExpress.git</developerConnection>
        <url>https://github.com/SummerBootFramework/jExpress/tree/main</url>
    </scm>

    <profiles>
        <profile>
            <id>no-tests</id>
            <properties>
                <maven.test.skip>true</maven.test.skip>
            </properties>
        </profile>
        <profile>
            <id>release</id>
            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <maven.compiler.release>21</maven.compiler.release>
                <maven-scm.version>2.2.1</maven-scm.version>
                <maven-source.version>3.4.0</maven-source.version>
                <maven-javadoc.version>3.12.0</maven-javadoc.version>
                <maven-deploy.version>3.1.4</maven-deploy.version>
                <maven-gpg.version>3.2.8</maven-gpg.version>
                <nexus-staging-maven-plugin.version>1.7.0</nexus-staging-maven-plugin.version>
                <central-publishing.version>0.10.0</central-publishing.version>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-scm-plugin</artifactId>
                        <!-- <version>1.12.2</version> -->
                        <version>${maven-scm.version}</version>
                    </plugin>
                    <!--Source-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>${maven-source.version}</version>
                        <executions>
                            <execution>
                                <id>attach-sources</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!--Java doc  -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>${maven-javadoc.version}</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!--GPG -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${maven-gpg.version}</version>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <!-- Deploy to https://central.sonatype.com/artifact/org.summerboot/jexpress/,
                    and then publish to https://repo.maven.apache.org/maven2/org/summerboot/jexpress/ -->
                    <plugin>
                        <groupId>org.sonatype.central</groupId>
                        <artifactId>central-publishing-maven-plugin</artifactId>
                        <version>${central-publishing.version}</version>
                        <extensions>true</extensions>
                        <configuration>
                            <publishingServerId>central</publishingServerId>
                            <autoPublish>false</autoPublish>
                            <waitUntil>validated</waitUntil>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <properties>
        <!-- common properties and dependencies -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--        <maven.compiler.source>21</maven.compiler.source>-->
        <!--        <maven.compiler.target>21</maven.compiler.target>-->
        <maven.compiler.release>21</maven.compiler.release>
        <maven-clean.version>3.5.0</maven-clean.version>
        <maven-compiler.version>3.15.0</maven-compiler.version>
        <maven-dependency.version>3.10.0</maven-dependency.version>
        <maven-jar.version>3.5.0</maven-jar.version>
        <maven-resources.version>3.5.0</maven-resources.version>
        <maven-surefire.version>3.5.5</maven-surefire.version>
        <maven-doc-version>3.12.0</maven-doc-version>
        <maven-install.version>3.1.4</maven-install.version>
        <!-- Commons -->
        <commons-lang3.version>3.20.0</commons-lang3.version>
        <commons-cli.version>1.11.0</commons-cli.version>
        <commons-io.version>2.22.0</commons-io.version>
        <commons-text.version>1.15.0</commons-text.version>
        <owasp.encoder.version>1.4.0</owasp.encoder.version>
        <!-- Logging -->
        <log4j-api.version>2.26.0</log4j-api.version>
        <log4j-disruptor.version>4.0.0</log4j-disruptor.version>
        <!-- Mail -->
        <jakarta-mail.version>2.0.2</jakarta-mail.version>
        <jakarta-activation.version>2.0.1</jakarta-activation.version>
        <!-- Security -->
        <bouncycastle.version>1.84</bouncycastle.version>
        <!-- JWT -->
        <jwt.version>0.13.0</jwt.version>

        <!-- NIO Netty -->
        <netty.version>4.2.15.Final</netty.version>
        <netty-tcnative.version>2.0.78.Final</netty-tcnative.version>
        <!-- gRPC and protobuf -->
        <grpc.version>1.81.0</grpc.version>
        <guava.version>33.6.0-jre</guava.version>
        <protobuf.version>4.35.0</protobuf.version>
        <!-- Web JAX-RS -->
        <swagger.core.version>2.2.49</swagger.core.version>
        <!--<elastic-apm.version>1.36.0</elastic-apm.version>-->


        <!-- MIME-Type -->
        <tika.version>3.3.1</tika.version>
        <!-- JAX-RS -->
        <rs-api.version>4.0.0</rs-api.version>
        <jakarta.annotation.version>3.0.0</jakarta.annotation.version>
        <reflections.version>0.10.2</reflections.version>

        <!-- JSON/XML/Bean Validation -->
        <jackson.version>3.2.0</jackson.version>
        <jackson.annotations.version>2.22</jackson.annotations.version>
        <jackson2.version>2.21.3</jackson2.version>
        <!-- Bean Validation -->
        <jakarta.el.version>6.0.1</jakarta.el.version>
        <tomcat-embed-el.version>11.0.22</tomcat-embed-el.version>
        <hibernate-validator.version>9.1.0.Final</hibernate-validator.version>

        <!-- IOC Injection -->
        <guice.version>7.0.0</guice.version>

        <!-- JPA -->
        <hibernate.version>7.4.0.Final</hibernate.version>
        <hikari-cp.version>7.0.2</hikari-cp.version>

        <!-- Cache -->
        <jedis.version>7.5.2</jedis.version>

        <quartz.version>2.5.2</quartz.version>
        <mqtt.version>1.2.5</mqtt.version>

        <!-- Template Engine -->
        <freemarker.version>2.3.34</freemarker.version>
        <jsoup.version>1.22.2</jsoup.version>
        <!-- Barcode -->
        <zxing.version>3.5.4</zxing.version>
        <!-- PDF - PDFBox -->
        <pdfbox.version>3.0.7</pdfbox.version>
        <!-- PDF - io.github.openhtmltopdf -->
        <openhtml.version>1.1.37</openhtml.version>
        <batik-transcoder.version>1.19</batik-transcoder.version>
        <!-- PDF - iText -->
        <itext-core.version>9.6.0</itext-core.version>
        <itext-html2pdf.version>6.3.2</itext-html2pdf.version>

        <veracode.version>1.2.1</veracode.version>

        <!-- Testing  -->
        <testng.version>7.12.0</testng.version>
        <jsonassert.version>2.0-rc1</jsonassert.version>
        <jdbc.version>9.7.0</jdbc.version>
    </properties>

    <dependencies>
        <!-- Commons -->
        <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli Apache 2.0-->
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>${commons-cli.version}</version>
            <!--            <optional>true</optional>-->
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io Apache 2.0-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 Apache 2.0-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-text</artifactId>
            <version>${commons-text.version}</version>
        </dependency>

        <!-- Reflection -->
        <!-- https://mvnrepository.com/artifact/org.reflections/reflections BSD 2-clause-->
        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
            <version>${reflections.version}</version>
        </dependency>


        <!-- Logging -->
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api Apache 2.0-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j-api.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core Apache 2.0-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j-api.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.lmax/disruptor Apache 2.0-->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>${log4j-disruptor.version}</version>
        </dependency>
        <!-- JDK Logging Adapter https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jul -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-jul</artifactId>
            <version>${log4j-api.version}</version>
            <scope>runtime</scope>
        </dependency>

        <!-- Mail -->
        <!-- https://mvnrepository.com/artifact/com.sun.mail/jakarta.mail -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>jakarta.mail</artifactId>
            <version>${jakarta-mail.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.sun.activation/jakarta.activation -->
        <dependency>
            <groupId>com.sun.activation</groupId>
            <artifactId>jakarta.activation</artifactId>
            <version>${jakarta-activation.version}</version>
        </dependency>


        <!-- Security -->
        <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk18on -->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk18on</artifactId>
            <version>${bouncycastle.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk18on</artifactId>
            <version>${bouncycastle.version}</version>
        </dependency>-->
        <!-- https://mvnrepository.com/artifact/org.owasp.encoder/encoder -->
        <dependency>
            <groupId>org.owasp.encoder</groupId>
            <artifactId>encoder</artifactId>
            <version>${owasp.encoder.version}</version>
        </dependency>

        <!-- JWT -->
        <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt Apache 2.0-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>${jwt.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-impl -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>${jwt.version}</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
            <version>${jwt.version}</version>
        </dependency>
        <!-- backward compatibility for jjwt only https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api -->
        <!--
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>-->
        <!-- fixed jjwt-jackson's dependency 5 security issues -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson2.version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- NIO Netty -->
        <!-- https://mvnrepository.com/artifact/io.netty/netty-all Apache 2.0-->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>${netty.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.netty/netty-transport-native-epoll Apache 2.0-->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport-native-epoll</artifactId>
            <version>${netty.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.netty/netty-transport-native-kqueue Apache 2.0-->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-transport-native-kqueue</artifactId>
            <version>${netty.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.netty/netty-tcnative-boringssl-static Apache-->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative-boringssl-static</artifactId>
            <version>${netty-tcnative.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.netty/netty-tcnative-classes -->
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-tcnative-classes</artifactId>
            <version>${netty-tcnative.version}</version>
        </dependency>

        <!-- gRPC and protobuf -->
        <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>${protobuf.version}</version>
            <!--            <scope>provided</scope>-->
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.grpc/grpc-protobuf -->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>${grpc.version}</version>
            <!--            <scope>provided</scope>-->
        </dependency>
        <!-- grpc security patch https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.grpc/grpc-netty-shaded -->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>${grpc.version}</version>
            <!--            <scope>provided</scope>-->
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.grpc/grpc-stub -->
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>${grpc.version}</version>
            <!--            <scope>provided</scope>-->
        </dependency>

        <!-- Open API -->
        <!-- https://mvnrepository.com/artifact/io.swagger.core.v3/swagger-annotations -->
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>${swagger.core.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/co.elastic.apm/apm-agent-api 
        <dependency>
            <groupId>co.elastic.apm</groupId>
            <artifactId>apm-agent-api</artifactId>
            <version>${elastic-apm.version}</version>
            <scope>provided</scope>
        </dependency>-->


        <!-- MIME-Type -->
        <!-- https://mvnrepository.com/artifact/org.apache.tika/tika-core Apache 2.0-->
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>${tika.version}</version>
        </dependency>
        <!-- JAX-RS -->
        <!-- https://mvnrepository.com/artifact/jakarta.ws.rs/jakarta.ws.rs-api -->
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <version>${rs-api.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api CDDL, GPL 2.0 -->
        <!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api -->
        <dependency>
            <groupId>jakarta.annotation</groupId>
            <artifactId>jakarta.annotation-api</artifactId>
            <version>${jakarta.annotation.version}</version>
        </dependency>


        <!-- JSON/XML/Bean Validation -->
        <!-- Source: https://mvnrepository.com/artifact/tools.jackson.core/jackson-databind -->
        <dependency>
            <groupId>tools.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- Source: https://mvnrepository.com/artifact/tools.jackson.core/jackson-core -->
        <dependency>
            <groupId>tools.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- XML -->
        <!-- Source: https://mvnrepository.com/artifact/tools.jackson.dataformat/jackson-dataformat-xml -->
        <dependency>
            <groupId>tools.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations Apache 2.0-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.annotations.version}</version>
        </dependency>

        <!-- Bean Validation -->
        <!-- https://mvnrepository.com/artifact/jakarta.el/jakarta.el-api -->
        <dependency>
            <groupId>jakarta.el</groupId>
            <artifactId>jakarta.el-api</artifactId>
            <version>${jakarta.el.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.el -->
        <!--        <dependency>-->
        <!--            <groupId>org.glassfish</groupId>-->
        <!--            <artifactId>jakarta.el</artifactId>-->
        <!--            <version>4.0.2</version>-->
        <!--        </dependency>-->
        <!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-el -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
            <version>${tomcat-embed-el.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${hibernate-validator.version}</version>
        </dependency>


        <!-- Injection -->
        <!-- https://mvnrepository.com/artifact/com.google.inject/guice Apache 2.0-->
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>${guice.version}</version>
        </dependency>


        <!-- JPA -->
        <!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core  LGPL 2.1-->
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.angus</groupId>
                    <artifactId>angus-activation</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-hikaricp  LGPL 2.1-->
        <dependency>
            <groupId>org.hibernate.orm</groupId>
            <artifactId>hibernate-hikaricp</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- JPA Connection Pool -->
        <!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP Apache 2.0-->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
            <version>${hikari-cp.version}</version>
        </dependency>


        <!-- Cache -->
        <!-- https://mvnrepository.com/artifact/redis.clients/jedis MIT-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
            <scope>provided</scope>
        </dependency>


        <!-- Scheduler -->
        <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>${quartz.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.zaxxer</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>${quartz.version}</version>
        </dependency>
        <!-- MQTT -->
        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.mqttv5.client</artifactId>
            <version>${mqtt.version}</version>
        </dependency>


        <!-- Template Engine -->
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker Apache 2.0-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>${freemarker.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup.version}</version>
        </dependency>

        <!-- Barcode -->
        <!-- ZXing (“zebra crossing”) is an open-source, multi-format 1D/2D barcode image processing library implemented in Java, with ports to other languages. This is the main library that supports QR codes in Java. -->
        <!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>${zxing.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>${zxing.version}</version>
            <scope>provided</scope>
        </dependency>


        <!-- PDF - iText -->
        <!-- https://mvnrepository.com/artifact/com.itextpdf/itext-core AGPL 3.0-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-core</artifactId>
            <version>${itext-core.version}</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.itextpdf/html2pdf AGPL 3.0-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>${itext-html2pdf.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- PDF - io.github.openhtmltopdf -->
        <!-- https://mvnrepository.com/artifact/io.github.openhtmltopdf/openhtmltopdf-pdfbox LGPL 2.1-->
        <dependency>
            <!-- ALWAYS required, usually included transitively. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-core</artifactId>
            <version>${openhtml.version}</version>
        </dependency>
        <dependency>
            <!-- Required for PDF output. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-pdfbox</artifactId>
            <version>${openhtml.version}</version>
        </dependency>
        <dependency>
            <!-- Required for image output only. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-java2d</artifactId>
            <version>${openhtml.version}</version>
        </dependency>
        <dependency>
            <!-- Optional, leave out if you do not need right-to-left or bi-directional text support. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-rtl-support</artifactId>
            <version>${openhtml.version}</version>
        </dependency>
        <dependency>
            <!-- Optional, leave out if you do not need logging via slf4j. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-slf4j</artifactId>
            <version>${openhtml.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <!-- Optional, leave out if you do not need SVG support. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-svg-support</artifactId>
            <version>${openhtml.version}</version>
        </dependency>
        <!-- security patch https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-transcoder -->
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-transcoder</artifactId>
            <version>${batik-transcoder.version}</version>
        </dependency>

        <dependency>
            <!-- Optional, leave out if you do not need MathML support. -->
            <!-- Introduced in RC-13. -->
            <groupId>io.github.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-mathml-support</artifactId>
            <version>${openhtml.version}</version>
        </dependency>

        <!-- Document to Image -->
        <!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/batik-all 
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-all</artifactId>
            <version>batik.version</version>
            <type>pom</type>
        </dependency>
        -->

        <!-- PDF - PDFBox -->
        <!-- Source: https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>${pdfbox.version}</version>
        </dependency>
        <!-- Source: https://mvnrepository.com/artifact/org.apache.pdfbox/xmpbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>xmpbox</artifactId>
            <version>${pdfbox.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.veracode.annotation/VeracodeAnnotations -->
        <dependency>
            <groupId>com.veracode.annotation</groupId>
            <artifactId>VeracodeAnnotations</artifactId>
            <version>${veracode.version}</version>
        </dependency>

        <!-- Testing -->
        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>${jdbc.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.testng/testng Apache 2.0-->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- Source: https://mvnrepository.com/artifact/org.skyscreamer/jsonassert -->
        <dependency>
            <groupId>org.skyscreamer</groupId>
            <artifactId>jsonassert</artifactId>
            <version>${jsonassert.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-clean-plugin -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>${maven-clean.version}</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>.</directory>
                            <includes>
                                <include>gc.*</include>
                            </includes>
                            <excludes>
                                <exclude>plugin/*.jar</exclude>
                            </excludes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                        <fileset>
                            <directory>run</directory>
                            <includes>
                                <include>gc.log*</include>
                                <include>*.jar</include>
                                <include>lib/**</include>
                                <include>lib</include>
                                <include>**/log/**</include>
                                <include>**/log</include>
                                <include>**/temp/**</include>
                                <include>**/temp</include>
                            </includes>
                            <excludes>
                                <exclude>plugin/*.jar</exclude>
                            </excludes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                        <fileset>
                            <directory>src/test</directory>
                            <includes>
                                <include>**/temp/**</include>
                                <include>**/temp</include>
                            </includes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                        <fileset>
                            <directory>.</directory>
                            <includes>
                                <include>etc/*</include>
                                <include>etc</include>
                                <include>gc.log*</include>
                            </includes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>${maven-dependency.version}</version>
            </plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler.version}</version>
                <configuration>
                    <showDeprecation>true</showDeprecation>
                    <!--                    <compilerArgs>-->
                    <!--                        <arg>-Xlint:unchecked</arg>-->
                    <!--                    </compilerArgs>-->
                </configuration>

            </plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-jar-plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${maven-jar.version}</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <!-- Resolves your native access warning -->
                            <Enable-Native-Access>ALL-UNNAMED</Enable-Native-Access>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-install-plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>${maven-install.version}</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire.version}</version>
                <configuration>
                    <argLine>-Djava.awt.headless=true -Xms2G -Xmx2G -XX:+UseZGC -XX:ZUncommitDelay=300
                        -XX:+ZGenerational -XX:+AlwaysPreTouch -XX:+PerfDisableSharedMem
                        -XX:+ZUncommit -XX:+DisableExplicitGC -XX:MaxDirectMemorySize=1g -XX:+HeapDumpOnOutOfMemoryError
                        -XX:HeapDumpPath=heapdump.hprof -XX:+ExitOnOutOfMemoryError
                        -Xlog:gc*:file=gc.log:time,level,tags:filecount=5,filesize=10M -Dfile.encoding=UTF-8
                        -Duser.timezone=America/Toronto -Djava.security.egd=file:/dev/./urandom
                        -Dio.netty.handler.ssl.openssl.engine.enable=true -Dio.netty.leakDetectionLevel=SIMPLE
                        -Dio.netty.native.workdir=lib
                        -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
                    </argLine>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>${maven-doc-version}</version>
                <configuration>
                    <additionalJOptions>
                        <additionalJOption>--allow-script-in-comments</additionalJOption>
                    </additionalJOptions>
                </configuration>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>${maven-resources.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>
