<?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>

    <parent>
        <groupId>com.atlassian.pom</groupId>
        <artifactId>closedsource-private-pom</artifactId>
        <version>6.3.6</version>
    </parent>

    <groupId>com.atlassian.plugins.authentication</groupId>
    <artifactId>atlassian-authentication-plugin-parent</artifactId>
    <version>4.3.11</version>
    <packaging>pom</packaging>

    <name>SSO for Atlassian Data Center - parent</name>

    <modules>
        <module>authentication-plugin</module>
        <module>authentication-plugin-api</module>
        <module>test-helper-plugin</module>
        <module>authentication-plugin-cluster-tests</module>
    </modules>

    <scm>
        <connection>scm:git:ssh://git@stash.atlassian.com:7997/CWD/atlassian-authentication-plugin.git</connection>
        <developerConnection>scm:git:ssh://git@stash.atlassian.com:7997/CWD/atlassian-authentication-plugin.git</developerConnection>
        <url>https://stash.atlassian.com/projects/CWD/repos/atlassian-authentication-plugin</url>
        <tag>atlassian-authentication-plugin-parent-4.3.11</tag>
    </scm>

    <properties>
        <crowd.version>4.2.0</crowd.version>
        <platform.version>5.0.29</platform.version>
        <jaxb.version>2.3.0</jaxb.version>
        <!-- This should match the version contained in the platform pom (see above)-->
        <spring.scanner.version>2.1.7</spring.scanner.version>
        <amps.version>8.13.4</amps.version>
        <jersey.version>1.19.4</jersey.version>
        <bamboo.version>8.1.11</bamboo.version>
        <bamboo.version.amps>${bamboo.version}</bamboo.version.amps>
        <bitbucket.version>8.0.0-breakit-m1</bitbucket.version>
        <!-- 8.8.0-m2 is used for this property because the tests cannot run against a Bitbucket version < 8.8. The home directory ZIP files which are used in tests are only compatible with v8.8+ -->
        <bitbucket.version.amps>8.8.0-m2</bitbucket.version.amps>
        <confluence.version>7.11.6</confluence.version>
        <confluence.version.amps>7.12.5</confluence.version.amps>
        <jira.version>8.15.0</jira.version>
        <jira.version.amps>${jira.version}</jira.version.amps>
        <jira.software.version>8.15.0</jira.software.version>
        <jira.software.version.amps>${jira.software.version}</jira.software.version.amps>
        <jira.servicemanagement.version>4.15.0</jira.servicemanagement.version>
        <jira.servicemanagement.version.amps>${jira.servicemanagement.version}</jira.servicemanagement.version.amps>

        <maven-enforcer.version>3.0.0-atlassian-m01</maven-enforcer.version>
        <confluence.maven-enforcer-rules.version>1.0.1</confluence.maven-enforcer-rules.version>

        <atlassian.audit.api.version>1.12.2</atlassian.audit.api.version>
        <atlassian.webdriver.version>3.1.0-confluence</atlassian.webdriver.version>
        <xvfb.enable>true</xvfb.enable>
        <node.version>v12.10.0</node.version>
        <yarn.version>v1.22.10</yarn.version>
        <docker.keycloak.skip>true</docker.keycloak.skip>
        <docker.openldap.skip>true</docker.openldap.skip>
        <docker.db.postgres.skip>true</docker.db.postgres.skip>
        <docker.db.mysql.skip>true</docker.db.mysql.skip>
        <docker.db.oracle.skip>true</docker.db.oracle.skip>

        <db.username>db_user</db.username>
        <db.password>db_pass</db.password>
        <db.name>tpm-tests</db.name>
        <db.port>5432</db.port>

        <docker.db.postgres.image>postgres:11.11</docker.db.postgres.image>
        <docker.db.mysql.image>mysql:8.0</docker.db.mysql.image>
        <docker.db.oracle.image>docker.atl-paas.net/atlassian/jira/server/oracle-database:19.3.0-se2-1.2.0-warm-1.1.0</docker.db.oracle.image>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>opensymphony</groupId>
                <artifactId>xwork</artifactId>
                <version>1.0.3-atlassian-18</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>opensymphony</groupId>
                <artifactId>webwork</artifactId>
                <version>2.1.5-atlassian-10</version>
                <scope>provided</scope>
                <optional>true</optional>
                <exclusions>
                    <exclusion>
                        <groupId>opensymphony</groupId>
                        <artifactId>pell-multipart</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.servlets</groupId>
                        <artifactId>cos</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>ognl</groupId>
                        <artifactId>ognl</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>velocity</groupId>
                        <artifactId>velocity</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.activation</groupId>
                        <artifactId>activation</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.mail</groupId>
                        <artifactId>mail</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>opensymphony</groupId>
                        <artifactId>xwork</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.platform</groupId>
                <artifactId>platform</artifactId>
                <version>${platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.atlassian.platform</groupId>
                <artifactId>third-party</artifactId>
                <version>${platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>javax.inject</groupId>
                <artifactId>javax.inject</artifactId>
                <version>1</version>
            </dependency>

            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.15</version>
            </dependency>
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>

            <dependency>
                <groupId>com.onelogin</groupId>
                <artifactId>java-saml</artifactId>
                <version>2.6.0-atlassian-1</version>
                <exclusions>
                    <exclusion>
                        <groupId>jakarta.xml.bind</groupId>
                        <artifactId>jakarta.xml.bind-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- overridden for VULN-1115575 -->
            <dependency>
                <groupId>org.apache.santuario</groupId>
                <artifactId>xmlsec</artifactId>
                <version>2.3.4</version>
                <exclusions>
                    <exclusion>
                        <groupId>jakarta.xml.bind</groupId>
                        <artifactId>jakarta.xml.bind-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>javax.ws.rs</groupId>
                <artifactId>jsr311-api</artifactId>
                <version>1.1.1</version>
            </dependency>
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>${jaxb.version}</version>
            </dependency>

            <dependency>
                <groupId>com.atlassian.analytics</groupId>
                <artifactId>analytics-api</artifactId>
                <version>5.1.4</version>
            </dependency>

            <dependency>
                <groupId>com.atlassian.json</groupId>
                <artifactId>atlassian-json-api</artifactId>
                <version>0.9</version>
            </dependency>

            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.9.0</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>5.1.14.RELEASE</version> <!-- lowest common version among supported products -->
            </dependency>

            <dependency>
                <groupId>org.springframework.osgi</groupId>
                <artifactId>spring-osgi-extender</artifactId>
                <version>1.2.0</version>
            </dependency>

            <!-- test deps -->
            <!-- Making commons-lang a test dependency to remove it from the compile -->
            <!-- classpath even if it's brought in transitively -->
            <dependency>
                <groupId>commons-lang</groupId>
                <artifactId>commons-lang</artifactId>
                <version>2.6</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.rest-assured</groupId>
                <artifactId>rest-assured</artifactId>
                <version>3.3.0</version>
            </dependency>
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.9.13</version>
            </dependency>
            <dependency>
                <groupId>com.jamesmurty.utils</groupId>
                <artifactId>java-xmlbuilder</artifactId>
                <version>1.1</version>
            </dependency>
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-client</artifactId>
                <version>${jersey.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.sun.jersey</groupId>
                <artifactId>jersey-core</artifactId>
                <version>${jersey.version}</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <groupId>javax.ws.rs</groupId>
                        <artifactId>jsr311-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.7</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.crowd</groupId>
                <artifactId>embedded-crowd-api</artifactId>
                <version>${crowd.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.crowd</groupId>
                <artifactId>embedded-crowd-spi</artifactId>
                <version>${crowd.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.crowd</groupId>
                <artifactId>embedded-crowd-core</artifactId>
                <version>${crowd.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.crowd</groupId>
                <artifactId>crowd-rest-admin</artifactId>
                <version>${crowd.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.crowd</groupId>
                <artifactId>crowd-integration-api</artifactId>
                <version>${crowd.version}</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.crowd</groupId>
                <artifactId>crowd-api</artifactId>
                <version>${crowd.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>javax.mail</groupId>
                        <artifactId>mail</artifactId>
                    </exclusion>
                    <!-- security exclusions -->
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-webmvc</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.seraph</groupId>
                <artifactId>atlassian-seraph</artifactId>
                <version>3.0.3</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.audit</groupId>
                <artifactId>atlassian-audit-api</artifactId>
                <version>${atlassian.audit.api.version}</version>
            </dependency>
            <dependency>
                <groupId>net.minidev</groupId>
                <artifactId>json-smart</artifactId>
                <version>2.4.10</version>
            </dependency>
            <dependency>
                <groupId>com.atlassian.johnson</groupId>
                <artifactId>atlassian-johnson-core</artifactId>
                <version>3.3.0</version>
            </dependency>

            <dependency>
                <groupId>com.atlassian.jira</groupId>
                <artifactId>jira-core</artifactId>
                <version>${jira.version}</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.jupiter</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.junit.platform</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.google.code.gson</groupId>
                        <artifactId>gson</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.datatype</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.dataformat</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.module</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>com.atlassian.confluence</groupId>
                <artifactId>confluence</artifactId>
                <version>${confluence.version}</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <groupId>com.atlassian.confluence</groupId>
                        <artifactId>confluence-rest-serialization</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.codehaus.jackson</groupId>
                        <artifactId>jackson-core-asl</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.codehaus.jackson</groupId>
                        <artifactId>jackson-mapper-asl</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-annotations</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-databind</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.datatype</groupId>
                        <artifactId>jackson-datatype-joda</artifactId>
                    </exclusion>
                    <!-- security exclusions -->
                    <exclusion>
                        <groupId>com.thoughtworks.xstream</groupId>
                        <artifactId>xstream</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.thrift</groupId>
                        <artifactId>libthrift</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.bouncycastle</groupId>
                        <artifactId>bcmail-jdk15on</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.jsoup</groupId>
                        <artifactId>jsoup</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.security</groupId>
                        <artifactId>spring-security-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-webmvc</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>dom4j</groupId>
                        <artifactId>dom4j</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.atlassian.bitbucket.server</groupId>
                <artifactId>bitbucket-api</artifactId>
                <version>${bitbucket.version}</version>
                <scope>provided</scope>
                <exclusions>
                    <!-- security exclusions -->
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.atlassian.maven.plugins</groupId>
                    <artifactId>amps-maven-plugin</artifactId>
                    <version>${amps.version}</version>
                    <extensions>true</extensions>
                    <configuration>
                        <skipRestDocGeneration>true</skipRestDocGeneration>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>com.atlassian.plugin</groupId>
                    <artifactId>atlassian-spring-scanner-maven-plugin</artifactId>
                    <version>${spring.scanner.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>atlassian-spring-scanner</goal>
                            </goals>
                            <phase>process-classes</phase>
                        </execution>
                    </executions>
                    <configuration>
                        <scannedDependencies>
                            <dependency>
                                <groupId>com.atlassian.plugin</groupId>
                                <artifactId>atlassian-spring-scanner-external-jar</artifactId>
                            </dependency>
                        </scannedDependencies>
                        <verbose>false</verbose>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.35.0</version>
                    <configuration>
                        <images>
                            <image>
                                <alias>openldap</alias>
                                <name>rroemhild/test-openldap</name>

                                <run>
                                    <skip>${docker.openldap.skip}</skip>
                                    <ports>
                                        <port>openldap.port:10389</port>
                                    </ports>
                                    <wait>
                                        <log>slapd starting</log>
                                        <time>60000</time>
                                    </wait>
                                </run>
                            </image>

                            <image>
                                <alias>keycloak</alias>
                                <name>jboss/keycloak</name>

                                <run>
                                    <!-- As described here: https://github.com/jboss-dockerfiles/wildfly/issues/25#issuecomment-234723315
                                    OpenShift, which is responsible for setting up keystore of Keycloak assign random user to run the container. Id the chosen user
                                    will be non-admin, there will be permission denied error and certificate will be generated instead of using custom one -->
                                    <user>root</user>
                                    <skip>${docker.keycloak.skip}</skip>
                                    <ports>
                                        <port>7777:8443</port>
                                    </ports>
                                    <env>
                                        <KEYCLOAK_USER>keycloakAdmin</KEYCLOAK_USER>
                                        <KEYCLOAK_PASSWORD>p4ssw0rd</KEYCLOAK_PASSWORD>
                                    </env>
                                    <volumes>
                                        <bind>
                                             <!-- Bind certificate and private key which will be used by KeyCloak -->
                                             <!-- More info here: https://hub.docker.com/r/jboss/keycloak/ -> Setting up TLS(SSL) -->
                                            <volume>${project.build.testOutputDirectory}/keycloak/tls:/etc/x509/https:ro</volume>
                                        </bind>
                                    </volumes>
                                </run>
                            </image>
                            <image>
                                <name>${docker.db.postgres.image}</name>
                                <run>
                                    <skip>${docker.db.postgres.skip}</skip>
                                    <ports>
                                        <port>db.port:5432</port>
                                    </ports>
                                    <env>
                                        <POSTGRES_PASSWORD>${db.password}</POSTGRES_PASSWORD>
                                        <POSTGRES_USER>${db.username}</POSTGRES_USER>
                                        <POSTGRES_DB>${db.name}</POSTGRES_DB>
                                    </env>
                                    <wait>
                                        <log>PostgreSQL init process complete</log>
                                        <time>120000</time>
                                    </wait>
                                    <log>
                                        <prefix>postgres</prefix>
                                    </log>
                                    <stopMode>kill</stopMode>
                                </run>
                            </image>
                            <image>
                                <name>${docker.db.mysql.image}</name>
                                <run>
                                    <skip>${docker.db.mysql.skip}</skip>
                                    <wait>
                                        <log>mysqld: ready for connections</log>
                                        <time>20000</time>
                                    </wait>
                                    <env>
                                        <MYSQL_ROOT_PASSWORD>${db.password}</MYSQL_ROOT_PASSWORD>
                                        <MYSQL_DATABASE>${db.name}</MYSQL_DATABASE>
                                        <MYSQL_USER>${db.username}</MYSQL_USER>
                                        <MYSQL_PASSWORD>${db.password}</MYSQL_PASSWORD>
                                    </env>
                                    <ports>
                                        <port>db.port:3306</port>
                                    </ports>
                                </run>
                            </image>
                            <image>
                                <name>${docker.db.oracle.image}</name>
                                <run>
                                    <skip>${docker.db.oracle.skip}</skip>
                                    <wait>
                                        <log>DATABASE IS READY TO USE!</log>
                                        <time>1200000</time>
                                    </wait>
                                    <ports>
                                        <port>db.port:1521</port>
                                    </ports>
                                </run>
                            </image>
                        </images>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>${maven-enforcer.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>de.skuzzle.enforcer</groupId>
                        <artifactId>restrict-imports-enforcer-rule</artifactId>
                        <version>1.4.0</version>
                    </dependency>
                    <dependency>
                        <groupId>com.atlassian.confluence.maven-enforcer-rules</groupId>
                        <artifactId>confluence-maven-enforcer-rules</artifactId>
                        <version>${confluence.maven-enforcer-rules.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <!-- Disable the "hammer" rule -->
                        <id>ban-milestones-and-release-candidates</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <!-- Disable the build environment rules (allows using AMPS snapshots) -->
                        <id>enforce-build-environment</id>
                        <phase>none</phase>
                    </execution>
                    <execution>
                        <id>ban_conflicting_dependencies</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <searchTransitive>true</searchTransitive>
                                    <message>exclude wrong javamail jars, use jakarta.mail:mail-api</message>
                                    <excludes>
                                        <exclude>javax.mail:mail:*:jar:compile</exclude>
                                        <exclude>javax.mail:javax.mail-api:*:jar:compile</exclude>
                                        <exclude>javamail:javamail:*:jar:compile</exclude>
                                        <exclude>com.sun.mail:javax.mail:*:jar:compile</exclude>
                                    </excludes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ban_imports</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <rules>
                                <RestrictImports>
                                    <reason>Use org.springframework.http.MediaType instead as loading this class will cause scanning of the whole classpath</reason>
                                    <bannedImport>javax.ws.rs.core.MediaType</bannedImport>
                                </RestrictImports>
                            </rules>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ban_dependency_version_ranges</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <phase>validate</phase>
                        <configuration>
                            <rules>
                                <myCustomRule implementation="com.atlassian.confluence.maven.enforcer.rules.BanDependencyVersionRangesRule">
                                    <failureMessage>
                                        Some project dependencies have version ranges, which is not allowed. Use dependency:tree to find them.
                                    </failureMessage>
                                </myCustomRule>
                            </rules>
                            <fail>true</fail>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>3.1.0</version>
                <dependencies>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>8.24</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>validate</phase>
                        <configuration>
                            <configLocation>checkstyle.xml</configLocation>
                            <encoding>UTF-8</encoding>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>true</failsOnError>
                        </configuration>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
