<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.expediagroup.molten</groupId>
    <artifactId>molten-base</artifactId>
    <version>1.2.2</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>molten-platform</artifactId>

  <name>Molten - platform POM</name>
  <description>Platform POM for Molten</description>
  <packaging>pom</packaging>

  <properties>
    <java.version>11</java.version>
    <project.jdk.version>${java.version}</project.jdk.version>
    <project.sourceEncoding>UTF-8</project.sourceEncoding>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.version.required>3.6.1</maven.version.required>
    <skip.module.install>false</skip.module.install>
    <skip.module.deployment>false</skip.module.deployment>
    <skip.dependency.analyze>false</skip.dependency.analyze>
    <skip.unit.tests>false</skip.unit.tests>
    <skip.integration.tests>true</skip.integration.tests>
    <skip.javadoc>false</skip.javadoc>
    <surefire.fork.timeout.in.seconds>300</surefire.fork.timeout.in.seconds>
    <fail.for.duplicates>true</fail.for.duplicates>
    <skip.platform.banned.dependency.check>true</skip.platform.banned.dependency.check>
    <checkstyle.version>8.42</checkstyle.version>
    <checkstyle.skip>false</checkstyle.skip>
    <checkstyle.rules.directory>build</checkstyle.rules.directory>
    <checkstyle.config.location>${checkstyle.rules.directory}/checkstyle_rules.xml</checkstyle.config.location>
    <checkstyle.default.suppressions.location>${checkstyle.rules.directory}/suppressions_defaults.xml
    </checkstyle.default.suppressions.location>
    <checkstyle.suppressions.location>${checkstyle.rules.directory}/suppressions.xml</checkstyle.suppressions.location>
    <checkstyle.considered.severity>error</checkstyle.considered.severity>
    <checkstyle.considered.match>true</checkstyle.considered.match>
    <jacoco.skip>false</jacoco.skip>
    <jacoco.fail>false</jacoco.fail>
    <jacoco.branchRatio>0.80</jacoco.branchRatio>
    <jacoco.classRatio>0.80</jacoco.classRatio>
    <jacoco.complexityRatio>0.80</jacoco.complexityRatio>
    <jacoco.instructionRatio>0.80</jacoco.instructionRatio>
    <jacoco.lineRatio>0.80</jacoco.lineRatio>
    <jacoco.methodRatio>0.80</jacoco.methodRatio>
    <!-- versions -->
    <slf4j.version>1.7.30</slf4j.version>
    <logback.version>1.2.3</logback.version>
    <logback.json.version>0.1.5</logback.json.version>
    <logstash.logback.encoder.version>6.6</logstash.logback.encoder.version>
    <guava.version>30.1.1-jre</guava.version>
    <testng.version>7.4.0</testng.version>
    <assertj.version>3.19.0</assertj.version>
    <hamcrest.version>2.0.0.0</hamcrest.version>
    <mockito.version>3.10.0</mockito.version>
    <mockito-testng.version>0.3.0</mockito-testng.version>
    <byte-buddy.version>1.11.0</byte-buddy.version>
    <janino.version>3.1.4</janino.version>
    <junit.jupiter.version>5.7.2</junit.jupiter.version>
    <junit.platform.version>1.7.2</junit.platform.version>
    <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-compat-qual</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava-testlib</artifactId>
        <version>${guava.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <artifactId>junit</artifactId>
            <groupId>junit</groupId>
          </exclusion>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>checker-compat-qual</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- logging -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>${slf4j.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${logback.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback.contrib</groupId>
        <artifactId>logback-json-classic</artifactId>
        <version>${logback.json.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback.contrib</groupId>
        <artifactId>logback-jackson</artifactId>
        <version>${logback.json.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>${logstash.logback.encoder.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>${janino.version}</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>commons-compiler</artifactId>
        <version>${janino.version}</version>
        <scope>runtime</scope>
      </dependency>
      <!-- testing -->
      <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
        <scope>test</scope>
        <exclusions>
          <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy</artifactId>
        <version>${byte-buddy.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy-agent</artifactId>
        <version>${byte-buddy.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>java-hamcrest</artifactId>
        <version>${hamcrest.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${assertj.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-commons</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-engine</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-launcher</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-testng</artifactId>
        <version>${mockito-testng.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.awaitility</groupId>
        <artifactId>awaitility</artifactId>
        <version>4.1.0</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-testng</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>java-hamcrest</artifactId>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava-testlib</artifactId>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>log4j-over-slf4j</artifactId>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.codehaus.janino</groupId>
      <artifactId>janino</artifactId>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
            <source>${java.version}</source>
            <target>${java.version}</target>
            <release>${java.version}</release>
            <jdkToolchain>
              <version>${java.version}</version>
            </jdkToolchain>
            <compilerArgs>
              <arg>-Xlint:deprecation</arg>
            </compilerArgs>
            <forceJavacCompilerUse>true</forceJavacCompilerUse>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.2.0</version>
          <configuration>
            <archive>
              <manifestEntries>
                <Build-Version>${project.version}</Build-Version>
                <Build-DateTime>${maven.build.timestamp}</Build-DateTime>
                <Maven-GroupId>${project.groupId}</Maven-GroupId>
                <Maven-ArtifactId>${project.artifactId}</Maven-ArtifactId>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>3.0.0-M1</version>
          <configuration>
            <skip>${skip.module.deployment}</skip>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>3.0.0-M1</version>
          <configuration>
            <skip>${skip.module.install}</skip>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>3.0.0-M5</version>
          <configuration>
            <skip>${skip.integration.tests}</skip>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-checkstyle-plugin</artifactId>
          <version>3.1.2</version>
          <configuration>
            <configLocation>${checkstyle.config.location}</configLocation>
            <suppressionsFileExpression>checkstyle.default.suppressions.file</suppressionsFileExpression>
            <suppressionsLocation>${checkstyle.default.suppressions.location}</suppressionsLocation>
            <propertyExpansion>
              checkstyle.suppressions.file=${checkstyle.suppressions.location}
              checkstyle.considered.severity=${checkstyle.considered.severity}
              checkstyle.considered.match=${checkstyle.considered.match}
            </propertyExpansion>
            <consoleOutput>true</consoleOutput>
            <failOnViolation>true</failOnViolation>
            <logViolationsToConsole>true</logViolationsToConsole>
            <includeTestSourceDirectory>true</includeTestSourceDirectory>
            <includeResources>true</includeResources>
            <includeTestResources>true</includeTestResources>
            <skip>${checkstyle.skip}</skip>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>com.puppycrawl.tools</groupId>
              <artifactId>checkstyle</artifactId>
              <version>${checkstyle.version}</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven-surefire-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>0.8.7</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.2.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.9.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>3.0.0-M3</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-report-plugin</artifactId>
          <version>${maven-surefire-plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.2.0</version>
          <configuration>
            <encoding>${project.reporting.outputEncoding}</encoding>
            <source>${java.version}</source>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jxr-plugin</artifactId>
          <version>3.1.1</version>
        </plugin>
        <plugin>
          <groupId>org.basepom.maven</groupId>
          <artifactId>duplicate-finder-maven-plugin</artifactId>
          <version>1.5.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.1.2</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>3.0.0-M4</version>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>default-cli</id>
            <goals>
              <goal>analyze</goal>
            </goals>
            <configuration>
              <skip>${skip.dependency.analyze}</skip>
              <ignoreNonCompile>true</ignoreNonCompile>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <executions>
          <execution>
            <phase>process-test-classes</phase>
            <goals>
              <goal>check</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <skip>${skip.unit.tests}</skip>
          <forkedProcessTimeoutInSeconds>${surefire.fork.timeout.in.seconds}</forkedProcessTimeoutInSeconds>
          <forkedProcessExitTimeoutInSeconds>30</forkedProcessExitTimeoutInSeconds>
          <forkCount>1</forkCount>
          <reuseForks>true</reuseForks>
          <argLine>
            -Djunit.jupiter.displayname.generator.default=org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores
            -Dreactor.schedulers.defaultPoolSize=8
          </argLine>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-junit-platform</artifactId>
            <version>${maven-surefire-plugin.version}</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.surefire</groupId>
            <artifactId>surefire-testng</artifactId>
            <version>${maven-surefire-plugin.version}</version>
          </dependency>
          <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
          </dependency>
          <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>jacoco-initialize</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>check</id>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <rules>
                <rule>
                  <element>BUNDLE</element>
                  <limits>
                    <limit>
                      <counter>COMPLEXITY</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.complexityRatio}</minimum>
                    </limit>
                    <limit>
                      <counter>CLASS</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.classRatio}</minimum>
                    </limit>
                    <limit>
                      <counter>METHOD</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.methodRatio}</minimum>
                    </limit>
                    <limit>
                      <counter>BRANCH</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.branchRatio}</minimum>
                    </limit>
                    <limit>
                      <counter>LINE</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.lineRatio}</minimum>
                    </limit>
                    <limit>
                      <counter>INSTRUCTION</counter>
                      <value>COVEREDRATIO</value>
                      <minimum>${jacoco.instructionRatio}</minimum>
                    </limit>
                  </limits>
                </rule>
              </rules>
              <includes>
                <include>com/hotels/**/*.class</include>
              </includes>
              <excludes>
                <exclude>**/*Configuration.class</exclude>
              </excludes>
              <skip>${jacoco.skip}</skip>
              <haltOnFailure>${jacoco.fail}</haltOnFailure>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <skip>${skip.javadoc}</skip>
        </configuration>
        <executions>
          <execution>
            <id>attach-javadocs</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <dependencies>
          <dependency>
            <!-- add support for ssh/scp -->
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>3.4.3</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.doxia</groupId>
            <artifactId>doxia-module-markdown</artifactId>
            <version>1.9.1</version>
          </dependency>
        </dependencies>
        <configuration>
          <siteDirectory>${project.basedir}/src/site</siteDirectory>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.basepom.maven</groupId>
        <artifactId>duplicate-finder-maven-plugin</artifactId>
        <configuration>
          <failBuildInCaseOfConflict>${fail.for.duplicates}</failBuildInCaseOfConflict>
          <ignoredResourcePatterns>
            <ignoredResourcePattern>placeholder.txt</ignoredResourcePattern>
          </ignoredResourcePatterns>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>[${maven.version.required},)</version>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>enforce-java-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireJavaVersion>
                  <version>${java.version}</version>
                </requireJavaVersion>
              </rules>
            </configuration>
          </execution>
          <execution>
            <id>enforce-platform-banned-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <skip>${skip.platform.banned.dependency.check}</skip>
              <rules>
                <bannedDependencies>
                  <message>Sorry, I am unable to provide you with JRuby artifacts as they are banned from use at
                    Hotels.com. Please contact Árpád Tomán if you have a real requirement to use JRuby
                  </message>
                  <excludes>
                    <exclude>org.jruby:jruby</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Sorry, I am unable to provide you with commons-logging as this artifact is banned from use at
                    Hotels.com as we favor the logback framework for logging. Logback natively implements the SLF4J API
                    and so ch.qos.logback:logback-classic:${logback.version} can be considered a direct drop-in
                    replacement.
                  </message>
                  <excludes>
                    <exclude>commons-logging:commons-logging</exclude>
                    <exclude>org.apache.commons:commons-logging</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Sorry, I am unable to provide you with Log4J as this artifact is banned from use at
                    Hotels.com as we favor the logback framework for logging.
                  </message>
                  <excludes>
                    <exclude>log4j:log4j</exclude>
                  </excludes>
                  <searchTransitive>true</searchTransitive>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Sorry, I am unable to provide you with SLF4J artifacts as they are banned from use at
                    Hotels.com as we favor the logback framework for logging. Logback natively implements the SLF4J API
                    and so ch.qos.logback:logback-classic:${logback.version} can be considered a direct drop-in
                    replacement.
                  </message>
                  <excludes>
                    <exclude>org.slf4j:slf4j-jcl</exclude>
                    <exclude>org.slf4j:slf4j-jdk14</exclude>
                    <exclude>org.slf4j:slf4j-log4j12</exclude>
                    <exclude>org.slf4j:slf4j-nop</exclude>
                    <exclude>org.slf4j:slf4j-simple</exclude>
                    <exclude>slf4j-simple:slf4j-simple</exclude>
                    <exclude>org.slf4j:slf4j-simple</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please ensure that Mockito is only in the test scope</message>
                  <excludes>
                    <exclude>org.mockito:mockito-core</exclude>
                  </excludes>
                  <includes>
                    <include>org.mockito:mockito-core:*:*:test</include>
                  </includes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please ensure that TestNG is only in the test scope</message>
                  <excludes>
                    <exclude>org.testng:testng</exclude>
                  </excludes>
                  <includes>
                    <include>org.testng:testng:*:*:test</include>
                  </includes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please avoid using easymock. Rather use mockito.</message>
                  <excludes>
                    <exclude>org.easymock:easymock</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please ensure that JUnit Jupiter is used</message>
                  <excludes>
                    <exclude>junit:junit</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please ensure that JUnit is only in the test scope</message>
                  <excludes>
                    <exclude>org.junit.jupiter:*</exclude>
                    <exclude>org.junit.platform:*</exclude>
                  </excludes>
                  <includes>
                    <include>org.junit.jupiter:*:*:*:test</include>
                    <include>org.junit.platform:*:*:*:test</include>
                  </includes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use org.hamcrest:java-hamcrest instead of hamcrest-core:hamcrest*</message>
                  <excludes>
                    <exclude>hamcrest-core:hamcrest</exclude>
                    <exclude>org.hamcrest:hamcrest-core</exclude>
                    <exclude>org.hamcrest:hamcrest-all</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use org.mockito:mockito-core instead of org.mockito:mockito-all</message>
                  <excludes>
                    <exclude>org.mockito:mockito-all</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use cglib:cglib instead of org.sonatype.sisu.inject:cglib or cglib:cglib-nodep
                  </message>
                  <excludes>
                    <exclude>org.sonatype.sisu.inject:cglib</exclude>
                    <exclude>cglib:cglib-nodep</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use org.ow2.asm:asm instead of asm:asm</message>
                  <excludes>
                    <exclude>asm:asm</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use org.aspectj:aspectjweaver instead of aspectj:aspectjrt or org.aspectj:aspectjrt
                  </message>
                  <excludes>
                    <exclude>aspectj:aspectjrt</exclude>
                    <exclude>org.aspectj:aspectjrt</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use commons-pool:commons-pool instead of org.apache.commons:commons-pool</message>
                  <excludes>
                    <exclude>org.apache.commons:commons-pool</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use commons-collections:commons-collections instead of
                    org.apache.commons:commons-collections
                  </message>
                  <excludes>
                    <exclude>org.apache.commons:commons-collections</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use commons-lang:commons-lang instead of org.apache.commons:commons-lang or
                    org.apache:commons-lang
                  </message>
                  <excludes>
                    <exclude>org.apache:commons-lang</exclude>
                    <exclude>org.apache.commons:commons-lang</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use commons-io:commons-io instead of org.apache.commons:commons-io</message>
                  <excludes>
                    <exclude>org.apache.commons:commons-io</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use io.netty:netty instead of org.jboss.netty:netty</message>
                  <excludes>
                    <exclude>org.jboss.netty:netty</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please use io.dropwizard.metrics instead of com.codahale.metrics modules.</message>
                  <excludes>
                    <exclude>com.codahale.metrics</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please exclude org.springframework:spring-asm because this dependency no longer exists in
                    Spring 3.2+ and its content was moved to org.springframework:spring-core.
                  </message>
                  <excludes>
                    <exclude>org.springframework:spring-asm</exclude>
                  </excludes>
                </bannedDependencies>
                <bannedDependencies>
                  <message>Please exclude org.springframework:spring-transaction because it has been renamed in Spring
                    3.2+ to org.springframework:spring-tx.
                  </message>
                  <excludes>
                    <exclude>org.springframework:spring-transaction</exclude>
                  </excludes>
                </bannedDependencies>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <consoleOutput>false</consoleOutput>
          <failOnViolation>false</failOnViolation>
          <logViolationsToConsole>false</logViolationsToConsole>
        </configuration>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <inherited>false</inherited>
            <reports>
              <report>checkstyle-aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <inherited>false</inherited>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <configuration>
          <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
          <outputEncoding>${project.reporting.outputEncoding}</outputEncoding>
          <linkJavadoc>true</linkJavadoc>
        </configuration>
        <reportSets>
          <reportSet>
            <id>aggregate</id>
            <inherited>false</inherited>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>

</project>
