<?xml version="1.0" encoding="UTF-8"?>
<!--
~   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
~
~   http://www.apache.org/licenses/LICENSE-2.0
~
~   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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.basepom</groupId>
    <artifactId>basepom-minimal</artifactId>
    <version>29</version>
    <relativePath />
  </parent>

  <groupId>com.opentable</groupId>
  <artifactId>otj-parent-spring</artifactId>
  <packaging>pom</packaging>
  <version>220</version>
  <name>OpenTable Spring base pom</name>

  <description>This is the Base POM for internal OpenTable Spring Maven projects.</description>

  <properties>
    <!-- tweak basepom settings -->
    <basepom.check.skip-checkstyle>${basepom.check.skip-extended}</basepom.check.skip-checkstyle>
    <basepom.check.checkstyle-severity>warning</basepom.check.checkstyle-severity>
    <dep.plugin.dependency-versions-check.version>2.0.2</dep.plugin.dependency-versions-check.version>
    <dep.plugin.git-commit-id.version>2.2.6</dep.plugin.git-commit-id.version>
    <dep.plugin.assembly.version>3.1.1</dep.plugin.assembly.version>

    <project.build.generated-resources>${basedir}/target/generated-resources</project.build.generated-resources>

    <basepom.release.push-changes>true</basepom.release.push-changes>
    <basepom.test.timeout>600</basepom.test.timeout>
    <basepom.test.fork-count>0.5C</basepom.test.fork-count>

    <!-- basepom-oss picks -->
    <!-- License checker for OSS deployments. -->
    <basepom.check.skip-license>${basepom.check.skip-extended}</basepom.check.skip-license>
    <basepom.check.fail-license>${basepom.check.fail-extended}</basepom.check.fail-license>
    <!-- Some plugins can run early ("validate") or late ("verify") -->
    <basepom.check.phase-license>validate</basepom.check.phase-license> <!-- this is overriding basepom default -->
    <basepom.license.skip-existing>true</basepom.license.skip-existing>
    <!-- release profiles -->
    <basepom.release.profiles>basepom.oss-release,oss-build</basepom.release.profiles>

    <!-- Maven plugins -->
    <dep.plugin.exec.version>1.6.0</dep.plugin.exec.version>
    <!-- Plugin versions, ordered like http://maven.apache.org/plugins/ -->
    <dep.plugin.gpg.version>1.6</dep.plugin.gpg.version>
    <!-- https://github.com/mycila/license-maven-plugin/releases -->
    <dep.plugin.license.version>2.11</dep.plugin.license.version>
    <dep.plugin.echo.version>1.2.0</dep.plugin.echo.version>
    <dep.plugin.shade.version>3.2.1</dep.plugin.shade.version>
    <dep.plugin.dependency.outputxml>true</dep.plugin.dependency.outputxml>
    <dep.plugin.numbers.version>2.0</dep.plugin.numbers.version>
    <dep.plugin.eclipse-lifecycle.version>1.0.0</dep.plugin.eclipse-lifecycle.version>
    <dep.plugin.enforcer-extra-rules>1.0-beta-6</dep.plugin.enforcer-extra-rules>
    <!--
      Findbugs is no longer enabled by default, but the dependencies of findbugs-annotations, etc is still supported
      and child poms may reference this value
    -->
    <dep.findbugs.version>3.0.1</dep.findbugs.version>

    <!-- PMD versions -->
    <dep.plugin.pmd.ruleset.version>1.2.5</dep.plugin.pmd.ruleset.version>
    
    <!-- Expose Versions Plugin -->
    <dep.plugin.expose-versions-maven-plugin.version>1.6</dep.plugin.expose-versions-maven-plugin.version>
    <dep.plugin.expose-versions-maven-plugin.skip>false</dep.plugin.expose-versions-maven-plugin.skip>

    <!-- Core Spring Libraries -->
    <dep.spring-boot.version>2.1.8.RELEASE</dep.spring-boot.version>
    <dep.spring.version>5.1.9.RELEASE</dep.spring.version>
    <dep.spring-security.version>5.1.6.RELEASE</dep.spring-security.version>

    <!-- logging versions -->
    <dep.logback.version>1.2.3</dep.logback.version>
    <dep.slf4j.version>1.7.28</dep.slf4j.version>

    <dep.otj-test-log-config.version>1.1.2</dep.otj-test-log-config.version>
    <dep.otj-otl.version>0.9.2</dep.otj-otl.version>

    <dep.scala.version>2.12.6</dep.scala.version>

    <!-- validator implementation -->
    <dep.validator.version>6.0.17.Final</dep.validator.version>
    <!-- Validator API -->
    <dep.validator-api.version>2.0.1.Final</dep.validator-api.version>
    <!-- Validator EL -->
    <dep.el.version>3.0.1-b11</dep.el.version>

    <!-- http versions -->
    <dep.jetty.version>9.4.20.v20190813</dep.jetty.version>
    <dep.resteasy.version>4.1.1.Final</dep.resteasy.version>

    <!-- used by RestEasy -->
    <dep.jboss-logging.version>3.4.0.Final</dep.jboss-logging.version>
    <dep.smallrye.version>1.3.6</dep.smallrye.version>
    <dep.cdi-api.version>2.0.SP1</dep.cdi-api.version>

    <!-- instrumentation versions -->
    <!--
      NB: There is a related version in otj-metrics for
      com.ryantenney.metrics:metrics-spring.
    -->
    <dep.metrics4.version>4.0.6</dep.metrics4.version>
    <!-- We no longer use this notation to force upgrades -->
    <dep.metrics.version>${dep.metrics4.version}</dep.metrics.version>

    <!-- library versions -->
    <dep.aspectjweaver.version>1.9.4</dep.aspectjweaver.version>
    <dep.jackson.version>2.9.10</dep.jackson.version>
    <dep.kafka.version>2.0.1</dep.kafka.version>
    <dep.snappy.version>1.1.7.2</dep.snappy.version>
    <dep.reactive-streams.version>1.0.2</dep.reactive-streams.version>
    <dep.jdbi3.version>3.8.2</dep.jdbi3.version>
    <dep.flyway.version>5.2.4</dep.flyway.version>
    <dep.javamail.version>1.6.2</dep.javamail.version>
    <dep.snakeyaml.version>1.23</dep.snakeyaml.version>
    <dep.jna.version>4.5.2</dep.jna.version>
    <dep.guava.version>23.5-jre</dep.guava.version>
    <dep.hikari.version>3.3.1</dep.hikari.version>
    <dep.quartz.version>2.3.1</dep.quartz.version>
    <!-- We are blocked from going to zookeeper 3.5 by Kafka, which still as of 2.3 uses ZK 3.4 -->
    <dep.zookeeper.version>3.4.14</dep.zookeeper.version>
    <dep.mustache.version>0.9.6</dep.mustache.version>

    <!-- DB Drivers -->
    <dep.postgres-jdbc.version>42.2.6</dep.postgres-jdbc.version>
    <dep.mongo.version>3.11.0</dep.mongo.version>
    <dep.mongo-reactive.version>1.12.0</dep.mongo-reactive.version>
    <dep.mssql-jdbc.version>7.4.1.jre8</dep.mssql-jdbc.version>

    <!-- Apache HttpClient -->
    <dep.apache-httpclient.version>4.5.9</dep.apache-httpclient.version>
    <dep.apache-httpcore.version>4.4.12</dep.apache-httpcore.version>

    <!-- Apache Commons -->
    <dep.commons-codec.version>1.13</dep.commons-codec.version>
    <dep.commons-lang.version>3.9</dep.commons-lang.version>
    <dep.commons-configuration.version>1.10</dep.commons-configuration.version>
    <dep.commons-configuration2.version>2.5</dep.commons-configuration2.version>
    <dep.commons-collections3.version>3.2.2</dep.commons-collections3.version>
    <dep.commons-collections4.version>4.4</dep.commons-collections4.version>
    <dep.commons-io.version>2.6</dep.commons-io.version>
    <dep.commons-beanutils.version>1.9.3</dep.commons-beanutils.version>

    <!-- Failsafe -->
    <dep.failsafe2.version>2.3.1</dep.failsafe2.version>

    <!-- byte code gens -->
    <dep.javassist.version>3.25.0-GA</dep.javassist.version>
    <dep.asm.version>7.1</dep.asm.version>
    <dep.bytebuddy.version>1.10.1</dep.bytebuddy.version>
    <dep.objenesis.version>3.0.1</dep.objenesis.version>

    <!-- Testing libraries -->
    <dep.mockito.version>2.28.2</dep.mockito.version>
    <dep.assertj.version>3.13.2</dep.assertj.version>
    <dep.junit.version>4.12</dep.junit.version>
    <dep.easymock.version>3.6</dep.easymock.version>
    <dep.wiremock.version>2.25.1</dep.wiremock.version>
    <dep.bucket4j.version>4.4.1</dep.bucket4j.version>
    <dep.hamcrest.version>1.3</dep.hamcrest.version>
    <dep.jsr305.version>3.0.2</dep.jsr305.version>
    <!-- Some J2ee standards -->
    <dep.javax-annotation.version>1.3.2</dep.javax-annotation.version>
    <dep.javax.inject.version>1</dep.javax.inject.version>
    <dep.servlet-api.version>3.1.0</dep.servlet-api.version>
    <dep.jaxrs-api.version>2.1.1</dep.jaxrs-api.version>
    <!-- Java 9, 10, 11 no longer bundled
          Note a pending nightmare:
              Some of these are now separated between api and implementation
              AND also are changing GAV coordinates.
              That will mean we can declare them all here, but
              people still often need to pick up the pieces, sigh
    -->
    <dep.javax-activation.version>1.2.0</dep.javax-activation.version>
    <dep.javax-jaxws.version>2.3.1</dep.javax-jaxws.version>
    <dep.glassfish-jaxb.version>2.3.1</dep.glassfish-jaxb.version>
    <dep.javax-jaxb.version>2.3.1</dep.javax-jaxb.version>

    <!-- OTJ Stack -->
    <dep.otj-core.version>1.6.3</dep.otj-core.version>
    <dep.otj-spring.version>1.3.7</dep.otj-spring.version>
    <dep.otj-quartz.version>2.0.2</dep.otj-quartz.version>
    <dep.otj-pausedetector.version>2.0.3</dep.otj-pausedetector.version>
    <dep.otj-executors.version>2.1.4</dep.otj-executors.version>
    <dep.otj-scopes.version>2.0.3</dep.otj-scopes.version>
    <dep.otj-jvm.version>1.1.4</dep.otj-jvm.version>

    <dep.otj-jaxrs.version>3.0.1</dep.otj-jaxrs.version>
    <dep.otj-rest-template.version>1.0.20</dep.otj-rest-template.version>
    <dep.otj-webclient.version>1.0.3</dep.otj-webclient.version>

    <dep.otj-logging.version>3.0.6</dep.otj-logging.version>
    <dep.otj-metrics.version>4.0.13</dep.otj-metrics.version>
    <dep.otj-server.version>3.0.16</dep.otj-server.version>
    <dep.discovery.version>0.99.92</dep.discovery.version>
    <dep.otj-kafka.version>3.2.2</dep.otj-kafka.version>
    <dep.otj-jackson.version>2.1.6</dep.otj-jackson.version>
    <dep.otj-conservedheaders.version>3.0.6</dep.otj-conservedheaders.version>
    <dep.otj-spring-profiles.version>1.0.4</dep.otj-spring-profiles.version>
    <dep.otj-f5.version>1.0.4</dep.otj-f5.version>
    <dep.otj-filterorder.version>0.0.5</dep.otj-filterorder.version>
    <dep.otj-versioned-config.version>4.0.2</dep.otj-versioned-config.version>
    <dep.otj-sql.version>3.0.7</dep.otj-sql.version>
    <dep.otj-mongo.version>0.0.6</dep.otj-mongo.version>
    <dep.otj-credentials.version>0.9.0</dep.otj-credentials.version>
    <dep.otj-pgembedded.version>0.13.1</dep.otj-pgembedded.version>
    <dep.otj-httpheaders.version>0.1.4</dep.otj-httpheaders.version>
    <!-- In case we need to issue a test or one off of these, default to otj-credentials version but allow override -->
    <dep.otj-credentials-mongo.version>${dep.otj-credentials.version}</dep.otj-credentials-mongo.version>
    <dep.otj-credentials-sql.version>${dep.otj-credentials.version}</dep.otj-credentials-sql.version>
    <dep.otj-credentials-redis.version>${dep.otj-credentials.version}</dep.otj-credentials-redis.version>
    <dep.otj-credentials-snowflake.version>${dep.otj-credentials.version}</dep.otj-credentials-snowflake.version>
    <dep.otj-eventsender.version>0.0.12</dep.otj-eventsender.version>
    <dep.trust-client.version>0.5.5</dep.trust-client.version>
    <dep.abtest-client.version>0.23.11</dep.abtest-client.version>

    <!-- eda -->
    <dep.eda-client.version>2.0.2</dep.eda-client.version>
    <dep.eda-base.version>2.0.0</dep.eda-base.version>
    <!-- spring-kafka -->
    <dep.spring-kafka.version>2.2.8.RELEASE</dep.spring-kafka.version>

    <!-- Conditional bans (Maven Enforcer) -->
    <ot.build.allow-spring>true</ot.build.allow-spring>
    <ot.build.allow-guice>false</ot.build.allow-guice>
    <ot.build.allow-resteasy>true</ot.build.allow-resteasy>
    <ot.build.allow-joda-time>false</ot.build.allow-joda-time>
    <!-- https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062 -->
    <ot.build.allow-codehaus-jackson>false</ot.build.allow-codehaus-jackson>
    <ot.build.allow-jersey>false</ot.build.allow-jersey>
    <ot.build.allow-apache-httpclient>true</ot.build.allow-apache-httpclient>
    <ot.build.allow-spring-security-oauth2>false</ot.build.allow-spring-security-oauth2>

    <!-- hic sunt dracones -->
    <ot.build.allow-circular-dependencies>false</ot.build.allow-circular-dependencies>

    <!-- enable otpl to be used in sub-directories -->
    <otpl.project.dir>${basedir}</otpl.project.dir>

    <!-- allow to override docker TAG -->
    <otpl.docker.tag>${project.build.finalName}</otpl.docker.tag>
    
    <!-- Docker container should run as root, but can be overridden -->
    <otpl.docker.uid>0</otpl.docker.uid>

    <dep.netty.version>4.1.39.Final</dep.netty.version>
  </properties>

  <build>
    <!-- Make the artifacts contain the build number for snapshot builds. -->
    <finalName>${ot.build.name}</finalName>

    <resources>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
      </resource>
      <resource>
        <directory>${basedir}/src/main/java</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
      <resource>
        <directory>${project.build.generated-resources}</directory>
      </resource>
    </resources>

    <testResources>
      <testResource>
        <directory>${basedir}/src/test/resources</directory>
      </testResource>
      <testResource>
        <directory>${basedir}/src/test/java</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </testResource>
    </testResources>

    <pluginManagement>
     <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <configuration>
            <outputXML>${dep.plugin.dependency.outputxml}</outputXML>
          </configuration>
        </plugin>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>${dep.plugin.eclipse-lifecycle.version}</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions combine.children="append">
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-enforcer-plugin</artifactId>
                    <versionRange>[0,)</versionRange>
                    <goals>
                      <goal>enforce</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.ning.maven.plugins</groupId>
                    <artifactId>maven-dependency-versions-check-plugin</artifactId>
                    <versionRange>[0,)</versionRange>
                    <goals>
                      <goal>check</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.nesscomputing.mojo</groupId>
                    <artifactId>numbers-maven-plugin</artifactId>
                    <versionRange>[0,)</versionRange>
                    <goals>
                      <goal>get</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <versionRange>[0,)</versionRange>
                    <goals>
                      <goal>revision</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <versionRange>[0,)</versionRange>
                    <goals>
                      <goal>analyze-dep-mgt</goal>
                      <goal>analyze-duplicate</goal>
                      <goal>analyze-only</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>com.ning.maven.plugins</groupId>
                    <artifactId>maven-duplicate-finder-plugin</artifactId>
                    <versionRange>[0,)</versionRange>
                    <goals>
                      <goal>check</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>

        <!--
            MAVEN-ENFORCER-PLUGIN (The Loving Iron Fist of Maven™)
            Global banhammer

            Why?  These artifacts are considered hazardous to your health.  Each has its own rationale,
            descibed below inline.
        -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${dep.plugin.enforcer.version}</version>
          <dependencies>
            <dependency>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>extra-enforcer-rules</artifactId>
              <version>${dep.plugin.enforcer-extra-rules}</version>
            </dependency>
          </dependencies>
          <executions>
            <execution>
              <id>basepom.default</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${basepom.check.skip-enforcer}</skip>
                <fail>${basepom.check.fail-enforcer}</fail>
                <rules>
                  <bannedDependencies>
                    <!-- Now here is an arcane trick. See http://www.sonatype.com/people/2007/06/how-to-merge-sub-items-from-parent-pom-to-child-pom-in-a-maven-plugin-configuration-2/ for details... -->
                    <excludes combine.children="append">
		      <!-- c3p0 is old, outdated, and hikari is better. It now has a serious CVE as of 2019 -->
		      <exclude>com.mchange:c3p0</exclude>	    
                      <!-- clashes with commons-logging:commons-logging -->
                      <exclude>commons-logging:commons-logging-api</exclude>
                      <!-- replaced by org.apache.httpcomponents -->
                      <exclude>commons-httpclient</exclude>
                      <!-- logback implements slf4j directly.  No need for slf4j -->
                      <exclude>org.slf4j:slf4j</exclude>
                      <!-- slf4j-simple only allowed for tests -->
                      <exclude>org.slf4j:slf4j-simple:*:*:compile</exclude>
                      <!-- We don't use log4j, use log4j-over-slf4j instead -->
                      <exclude>org.slf4j:slf4j-log4j12</exclude>
                      <!-- junit-dep used to avoid a classless repackaging, but it is now obsoleted -->
                      <exclude>junit:junit-dep</exclude>

                      <!-- No Ness components, port them over. -->
                      <exclude>ness.components:*</exclude>
                      <exclude>com.nesscomputing.components:*</exclude>
                      <exclude>com.nesscomputing.testing:*</exclude>
                      <!-- Trumpet was the code-name for Ness, don't allow that to creep in. -->
                      <exclude>io.trumpet.components:*</exclude>

                      <!-- use Spring JMX instead -->
                      <exclude>org.weakref:jmxutils</exclude>
                      <!-- only the jsr305 jar is allowed, for @SuppressWarnings use findbugs-annotations -->
                      <exclude>com.google.code.findbugs:annotations</exclude>
                      <exclude>net.jcip:jcip-annotations</exclude>
                      <!-- replaced with org.kitei.testing:kitei-lessio -->
                      <exclude>ness.kawala:*</exclude>
                      <exclude>com.nesscomputing.testing:testing-lessio</exclude>
                      <!-- OpenTable transitional bans -->
                      <exclude>log4j:log4j</exclude>
                      <exclude>commons-logging:commons-logging</exclude>
                      <exclude>org.jboss.resteasy:jaxrs-api</exclude>
                      <exclude>org.jboss.spec.javax.annotation:*</exclude>
                      <exclude>javax.annotation:jsr250-api</exclude>
                      <exclude>com.opentable.components:otj-tracking</exclude>
                      <exclude>com.opentable.components:otj-server-templates</exclude>
                      <exclude>com.opentable.components:otj-config</exclude>
                      <exclude>com.opentable.components:otj-lifecycle</exclude>
                      <exclude>com.opentable.components:otj-jaxrs</exclude>
                      <exclude>com.opentable.components:otj-metrics:(,0.7.0)</exclude>
                      <exclude>com.opentable.components:otj-requestid</exclude>
                      <exclude>com.opentable.components:otj-httpclient</exclude>
                      <!-- Spring killed these.  die die die -->
                      <exclude>com.opentable.components:otj-config</exclude>
                      <exclude>com.opentable.components:otj-httpserver</exclude>
                      <exclude>com.opentable.components:otj-integration-testing</exclude>
                      <exclude>com.opentable.components:otj-jmx</exclude>
                      <exclude>com.opentable.components:otj-lifecycle</exclude>
                      <exclude>com.opentable.components:otj-migratory</exclude>
                      <exclude>com.opentable.components:otj-serverinfo</exclude>
                      <exclude>com.opentable.components:otj-service-packaging</exclude>
                      <exclude>com.opentable.components:otj-tinyhttp</exclude>
                      <exclude>com.opentable.components:otj-uuid</exclude>
                      <exclude>org.springframework:spring-jcl</exclude>
                      <!-- Shitty repackaged versions, use the real ones -->
                      <exclude>org.jboss.spec.javax.ws.rs</exclude>
                      <exclude>org.jboss.spec.javax.annotation</exclude>
                      <exclude>org.jboss.spec.javax.xml.bind</exclude>
                      <exclude>org.jboss.spec.javax.servlet</exclude>
                    </excludes>
                  </bannedDependencies>
                  <requireFilesDontExist>
                    <files>
                      <file>${basedir}/src/main/resources/log4j.xml</file>
                      <file>${basedir}/src/test/resources/log4j.xml</file>
                    </files>
                  </requireFilesDontExist>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of resteasy jackson2 provider -->
            <execution>
              <id>ban-resteasy-jackson2-provider</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-resteasy-jackson2-provider}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                    <exclude>org.jboss.resteasy:resteasy-jackson2-provider</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of joda-time, supplanted by JSR310 time in Java 8 -->
            <execution>
              <id>ban-joda-time</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-joda-time}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>joda-time:joda-time</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Spring Security OAuth2 is no longer supported with Spring Security 5 -->
            <execution>
              <id>ban-spring-security-oauth2</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-spring-security-oauth2}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>org.springframework.security.oauth:spring-security-oauth2</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of old org.codehaus.jackson artifacts -->
            <execution>
              <id>ban-codehaus-jackson</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-codehaus-jackson}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>org.codehaus.jackson:*</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of Spring, for writing modules which are DI-independent -->
            <execution>
              <id>ban-spring</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-spring}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>org.springframework</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of Guice, for writing modules which are DI-independent -->
            <execution>
              <id>ban-guice</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-guice}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>com.google.inject</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of RESTeasy, for when you're building Jersey stuff -->
            <execution>
              <id>ban-resteasy</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-resteasy}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>org.jboss.resteasy</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of Jersey, which we replaced with RESTeasy but
                 some external components still use
              -->
            <execution>
              <id>ban-jersey</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-jersey}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>com.sun.jersey:jersey-core</exclude>
                      <exclude>org.glassfish.jersey.core:jersey-common</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Allow optional banning of Apache HttpClient, for migrating to Jetty HttpClient -->
            <execution>
              <id>ban-apache-httpclient</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-apache-httpclient}</skip>
                <rules>
                  <bannedDependencies combine.children="append">
                    <excludes combine.children="append">
                      <exclude>org.apache.httpcomponents</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
              </configuration>
            </execution>
            <!-- Ban circular dependencies by default, as they are generally a design smell -->
            <execution>
              <id>ban-circular-dependencies</id>
              <phase>validate</phase>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <skip>${ot.build.allow-circular-dependencies}</skip>
                <rules>
                  <banCircularDependencies />
                </rules>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <compilerArgs combine.children="append">
              <arg>-parameters</arg>
            </compilerArgs>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${dep.plugin.surefire.version}</version>
          <configuration>
            <!-- Make sure we run all tests including those that do not have 'Test' in the name
                 (default includes *Test and Test* only) -->
            <includes>
              <include>**/*.java</include>
            </includes>
            <!-- And static nested classes ('$' in the name excluded by default) -->
            <excludes>
              <exclude />
            </excludes>
            <redirectTestOutputToFile>true</redirectTestOutputToFile>
          </configuration>
        </plugin>

        <plugin>
          <groupId>com.nesscomputing.mojo</groupId>
          <artifactId>numbers-maven-plugin</artifactId>
          <version>${dep.plugin.numbers.version}</version>
          <executions>
            <execution>
              <id>default-validate</id>
              <phase>validate</phase>
              <goals>
                <goal>get</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <activeGroups>
              <activeGroup>snapshot</activeGroup>
              <activeGroup>release</activeGroup>
            </activeGroups>
            <propertyGroups>
              <propertyGroup>
                <id>snapshot</id>
                <!-- This group is used for the snapshot builds.
                     It generates artifact names with a date
                -->
                <activeOnRelease>false</activeOnRelease>
                <onMissingProperty>ignore</onMissingProperty>
                <properties>
                  <property>
                    <name>ot.build.name</name>
                    <value>${project.artifactId}-${project.version}-#{ot.build.timestamp}_${user.name}</value>
                  </property>
                  <property>
                    <name>ot.build.number</name>
                    <value>#{ot.build.timestamp}_${user.name}</value>
                  </property>
                </properties>
              </propertyGroup>
              <propertyGroup>
                <id>release</id>
                <!-- This group is used for the release builds.
                     It generates normal artifact names
                -->
                <activeOnSnapshot>false</activeOnSnapshot>
                <properties>
                  <property>
                    <name>ot.build.name</name>
                    <value>${project.artifactId}-${project.version}</value>
                  </property>
                  <property>
                    <name>ot.build.number</name>
                    <value>release_${user.name}</value>
                  </property>
                </properties>
              </propertyGroup>
            </propertyGroups>
            <dates>
              <date>
                <export>true</export>
                <id>ot.build.timestamp</id>
                <format>yyyyMMdd_HHmmss</format>
                <timezone>UTC</timezone>
              </date>
            </dates>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <configuration>
            <linkXRef>false</linkXRef>
            <rulesets>
              <ruleset>otj-pmd-rulesets/ot-pmd.xml</ruleset>
            </rulesets>
            <excludeRoots>
              <excludeRoot>target/generated-sources</excludeRoot>
            </excludeRoots>
          </configuration>
          <dependencies>
            <dependency>
              <groupId>com.opentable</groupId>
              <artifactId>otj-pmd-rulesets</artifactId>
              <version>${dep.plugin.pmd.ruleset.version}</version>
            </dependency>
          </dependencies>
        </plugin>

        <plugin>
          <groupId>org.basepom.maven</groupId>
          <artifactId>duplicate-finder-maven-plugin</artifactId>
          <configuration combine.children="append">
            <ignoredClassPatterns>
              <ignoredClassPattern>^.*META-INF\.versions\.9\.module-info$</ignoredClassPattern>
            </ignoredClassPatterns>
            <exceptions>
              <exception>
                <conflictingDependencies>
                  <dependency>
                    <groupId>com.opentable.components</groupId>
                    <artifactId>otj-logging-kafka</artifactId>
                  </dependency>
                  <dependency>
                    <groupId>org.apache.kafka</groupId>
                    <artifactId>kafka-clients</artifactId>
                  </dependency>
                </conflictingDependencies>
                <resources>
                  <resource>kafka/kafka-version.properties</resource>
                </resources>
              </exception>
            </exceptions>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <!-- Provide a build number -->
      <plugin>
        <groupId>com.nesscomputing.mojo</groupId>
        <artifactId>numbers-maven-plugin</artifactId>
      </plugin>

        <plugin>
            <groupId>com.opentable</groupId>
            <artifactId>expose-versions-maven-plugin</artifactId>
            <version>${dep.plugin.expose-versions-maven-plugin.version}</version>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <serviceSignalProperty>ot.mainclass</serviceSignalProperty>
                <frameworkGroupId>com.opentable</frameworkGroupId>
                <frameworkArtifactId>otj-parent-spring</frameworkArtifactId>
                <frameworkPropertyName>otj.parent.pom.version</frameworkPropertyName>
                <frameworkVersionFileName>otj-version</frameworkVersionFileName>
                <skip>${dep.plugin.expose-versions-maven-plugin.skip}</skip>
            </configuration>
        </plugin>
    </plugins>
  </build>

  <!-- Note: This pulls in slf4j jcl adapter and api by default in ALL child POMS -->
  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

  <!-- Contains a number of "global" dependencies that should never change across our code base. -->
  <dependencyManagement>
    <dependencies>
      <!-- OT module dependencies -->
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-core</artifactId>
        <version>${dep.otj-core.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-spring</artifactId>
        <version>${dep.otj-spring.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-quartz</artifactId>
        <version>${dep.otj-quartz.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-pausedetector</artifactId>
        <version>${dep.otj-pausedetector.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-f5</artifactId>
        <version>${dep.otj-f5.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-filterorder</artifactId>
        <version>${dep.otj-filterorder.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-versioned-config</artifactId>
        <version>${dep.otj-versioned-config.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.logging</groupId>
        <artifactId>otj-otl</artifactId>
        <version>${dep.otj-otl.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-logging</artifactId>
        <version>${dep.otj-logging.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-logging-kafka</artifactId>
        <version>${dep.otj-logging.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-logging-jetty</artifactId>
        <version>${dep.otj-logging.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-client</artifactId>
        <version>${dep.otj-credentials.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-client</artifactId>
        <version>${dep.otj-credentials.version}</version>
        <type>test-jar</type>
      </dependency>
      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-sql</artifactId>
        <version>${dep.otj-credentials-sql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-sql-snowflake</artifactId>
        <version>${dep.otj-credentials-snowflake.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-redis</artifactId>
        <version>${dep.otj-credentials-redis.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-mongo</artifactId>
        <version>${dep.otj-credentials-mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.credentials</groupId>
        <artifactId>otj-credentials-bootstrap</artifactId>
        <version>${dep.otj-credentials.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-executors</artifactId>
        <version>${dep.otj-executors.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-eventsender</artifactId>
        <version>${dep.otj-eventsender.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-conservedheaders</artifactId>
        <version>${dep.otj-conservedheaders.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-conservedheaders-core</artifactId>
        <version>${dep.otj-conservedheaders.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-conservedheaders-jaxrs</artifactId>
        <version>${dep.otj-conservedheaders.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-conservedheaders-reactive</artifactId>
        <version>${dep.otj-conservedheaders.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-spring-profiles</artifactId>
        <version>${dep.otj-spring-profiles.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-scopes</artifactId>
        <version>${dep.otj-scopes.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-rest-template</artifactId>
        <version>${dep.otj-rest-template.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-rest-template-boot</artifactId>
        <version>${dep.otj-rest-template.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-jaxrs-shared</artifactId>
        <version>${dep.otj-jaxrs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-jaxrs-client</artifactId>
        <version>${dep.otj-jaxrs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-jaxrs-clientfactory-resteasy</artifactId>
        <version>${dep.otj-jaxrs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-jaxrs-clientfactory-jersey</artifactId>
        <version>${dep.otj-jaxrs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-webclient</artifactId>
        <version>${dep.otj-webclient.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-jackson</artifactId>
        <version>${dep.otj-jackson.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-metrics</artifactId>
        <version>${dep.otj-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-metrics-core</artifactId>
        <version>${dep.otj-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-metrics-jaxrs</artifactId>
        <version>${dep.otj-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-metrics-mvc</artifactId>
        <version>${dep.otj-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-metrics-reactive</artifactId>
        <version>${dep.otj-metrics.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-metrics-actuator</artifactId>
        <version>${dep.otj-metrics.version}</version>
      </dependency>	    
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-kafka</artifactId>
        <version>${dep.otj-kafka.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-kafka-streams</artifactId>
        <version>${dep.otj-kafka.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-kafka-tests</artifactId>
        <version>${dep.otj-kafka.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-kafka-spring</artifactId>
        <version>${dep.otj-kafka.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-mongo-core</artifactId>
        <version>${dep.otj-mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-mongo-sync</artifactId>
        <version>${dep.otj-mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-mongo-reactive</artifactId>
        <version>${dep.otj-mongo.version}</version>
      </dependency>


      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-server</artifactId>
        <version>${dep.otj-server.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-server-core</artifactId>
        <version>${dep.otj-server.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-server-jaxrs</artifactId>
        <version>${dep.otj-server.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-server-mvc</artifactId>
        <version>${dep.otj-server.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-server-reactive</artifactId>
        <version>${dep.otj-server.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-server-core</artifactId>
        <version>${dep.otj-server.version}</version>
        <classifier>tests</classifier>
      </dependency>

      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-jvm</artifactId>
        <version>${dep.otj-jvm.version}</version>
      </dependency>

      <!-- EDA -->
      <dependency>
        <groupId>com.opentable</groupId>
        <artifactId>ot-messaging-client</artifactId>
        <version>${dep.eda-client.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable</groupId>
        <artifactId>ot-messaging-base</artifactId>
        <version>${dep.eda-base.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-pg-embedded</artifactId>
        <version>${dep.otj-pgembedded.version}</version>
        <exclusions>
          <exclusion>
              <groupId>com.github.spotbugs</groupId>
              <artifactId>spotbugs-annotations</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>com.opentable</groupId>
        <artifactId>otj-httpheaders</artifactId>
        <version>${dep.otj-httpheaders.version}</version>
      </dependency>

      <dependency>
        <groupId>com.opentable.service.discovery</groupId>
        <artifactId>discovery-client</artifactId>
        <version>${dep.discovery.version}</version>
      </dependency>

      <!-- TODO: There are newer versions, but a fair amount of breaking changes -->
      <dependency>
        <groupId>net.java.dev.jna</groupId>
        <artifactId>jna</artifactId>
        <version>${dep.jna.version}</version>
      </dependency>

      <!-- SnakeYml -->
      <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>${dep.snakeyaml.version}</version>
      </dependency>

      <!-- ABtest and trust processor clients -->
      <dependency>
        <groupId>com.opentable.service.abtest</groupId>
        <artifactId>abtest-client</artifactId>
        <version>${dep.abtest-client.version}</version>
      </dependency>
      <dependency>
        <groupId>com.opentable.service.trust</groupId>
        <artifactId>trust-client</artifactId>
        <version>${dep.trust-client.version}</version>
      </dependency>

      <!-- jackson -->
      <!-- Core BOM to manage dependencies -->
      <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>${dep.jackson.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
      <!-- The BOM pins to 2.9.0, saying annotation is unchanged etc. I think that's confusing -->
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${dep.jackson.version}</version>
      </dependency>

      <!-- Jetty -->
      <!-- Core BOM to manage dependencies -->
      <!-- Ahead of spring and spring boot to get priority -->
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-bom</artifactId>
        <version>${dep.jetty.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
      <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>${dep.jetty.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.eclipse.jetty.orbit</groupId>
            <artifactId>javax.servlet</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- Manages netty-bom version that is incorrect in Spring Boot 2.1.4 -->
      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-bom</artifactId>
        <version>${dep.netty.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>

      <!-- Spring -->
      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-bom</artifactId>
        <version>${dep.spring-security.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>${dep.spring.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${dep.spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${dep.spring.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jcl</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${dep.spring.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.ibm.websphere</groupId>
            <artifactId>uow</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- 23/22 have issues in Java 8 - this build supports 8,9,10 -->
      <dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>${dep.javassist.version}</version>
      </dependency>

      <!-- Guava -->
      <!-- TODO: Post 23.5 switched to CheckerFramework, and false positives may occur -->
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${dep.guava.version}</version>
      </dependency>

      <!-- RESTeasy -->
      <!-- Once parent is fixed -->
      <!-- resteasy-jaxrs no longer exists, and has been split among the above -->
      <!-- https://github.com/resteasy/Resteasy/blob/d03630c2129ec1c4facd2523be44ab4d5cbedd66/docbook/reference/en/en-US/modules/Migration_from_older_versions.xml -->
      <!-- resteasy-validator-provider-11 has been renamed resteasy-validator-provider -->
      <dependency>
        <groupId>org.jboss.logging</groupId>
        <artifactId>jboss-logging</artifactId>
        <version>${dep.jboss-logging.version}</version>
      </dependency>
      <dependency>
        <groupId>io.smallrye</groupId>
        <artifactId>smallrye-config</artifactId>
        <version>${dep.smallrye.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>${dep.cdi-api.version}</version>
        <!-- Wants a newer glassfish -->
        <exclusions>
          <exclusion>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client-api</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-core-spi</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>jcip-annotations</artifactId>
            <groupId>net.jcip</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxb-api_2.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.xml.bind</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-annotations-api_1.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.annotation</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-core</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>jcip-annotations</artifactId>
            <groupId>net.jcip</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-annotations-api_1.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.annotation</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxb-api_2.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.xml.bind</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>jboss-annotations-api_1.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.annotation</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxb-api_2.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.xml.bind</groupId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>jboss-annotations-api_1.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.annotation</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
          </exclusion>
          <exclusion>
            <artifactId>jboss-jaxb-api_2.3_spec</artifactId>
            <groupId>org.jboss.spec.javax.xml.bind</groupId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-spring</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.jboss.spec.javax.annotation</groupId>
            <artifactId>jboss-annotations-api_1.3_spec</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson2-provider</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>net.jcip</groupId>
            <artifactId>jcip-annotations</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-client-jetty</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <!-- RESTeasy Bean Validation Provider - integrates with Bean Validation API -->
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-validator-provider</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-cdi</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-html</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-cache-core</artifactId>
        <version>${dep.resteasy.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_4.0_spec</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>


      <!-- Bean Validation -->
      <!-- The validation API itself -->
      <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>${dep.validator-api.version}</version>
      </dependency>
      <!--
        Implementation of BV API
        Hibernate changed the maven groupId in Hibernate 6 (not even the first release).
        We double maintain for the foreseeable future.
      -->
      <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>${dep.validator.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>${dep.validator.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>${dep.validator.version}</version>
      </dependency>


      <!-- "unified EL" as opposed to "spring EL". -->
      <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.el</artifactId>
        <version>${dep.el.version}</version>
      </dependency>

      <!-- Kafka -->
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.12</artifactId>
        <version>${dep.kafka.version}</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.12</artifactId>
        <classifier>test</classifier>
        <version>${dep.kafka.version}</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>${dep.kafka.version}</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>${dep.kafka.version}</version>
        <classifier>test</classifier>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-streams</artifactId>
        <version>${dep.kafka.version}</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>connect-api</artifactId>
        <version>${dep.kafka.version}</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>connect-json</artifactId>
        <version>${dep.kafka.version}</version>
        <exclusions>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.xerial.snappy</groupId>
        <artifactId>snappy-java</artifactId>
        <version>${dep.snappy.version}</version>
      </dependency>

      <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${dep.scala.version}</version>
      </dependency>

      <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>${dep.hikari.version}</version>
      </dependency>

      <dependency>
        <groupId>com.github.vladimir-bukhtoyarov</groupId>
        <artifactId>bucket4j-core</artifactId>
        <version>${dep.bucket4j.version}</version>
      </dependency>

      <!-- Quartz -->
      <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>${dep.quartz.version}</version>
        <exclusions>
          <exclusion>
            <groupId>com.mchange</groupId>
            <artifactId>mchange-commons-java</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
          </exclusion>
	  <exclusion>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP-java7</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>${dep.zookeeper.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>spotbugs-annotations</artifactId>
            <groupId>com.github.spotbugs</groupId>
          </exclusion>
          <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
          </exclusion>
          <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
          </exclusion>
          <exclusion>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-annotations</artifactId>
          </exclusion>	
        </exclusions>
      </dependency>

      <!-- logging -->
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${dep.logback.version}</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${dep.logback.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${dep.slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>${dep.slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${dep.slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>${dep.slf4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>${dep.slf4j.version}</version>
      </dependency>

      <!-- Apache commons components -->
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${dep.commons-lang.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-configuration2</artifactId>
        <version>${dep.commons-configurations2.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>${dep.commons-configuration.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>${dep.commons-codec.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>${dep.commons-collections3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>${dep.commons-collections4.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${dep.commons-io.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>${dep.commons-beanutils.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Codahale Metrics -->
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jmx</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-core</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-annotation</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-servlet</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-servlets</artifactId>
        <version>${dep.metrics4.version}</version>
        <!--
        used only in dropwizard 3.2.3+, and only for cpuServlet/adminServlet, this
       pulls in joda time if not excluded. Started to be an issue with abtest-client recently
       -->
        <exclusions>
          <exclusion>
            <groupId>com.papertrail</groupId>
            <artifactId>profiler</artifactId>
          </exclusion>
          <exclusion>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-logback</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-json</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jetty9</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jersey2</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jdbi</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jdbi3</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-httpclient</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-graphite</artifactId>
        <version>${dep.metrics4.version}</version>
        <exclusions>
          <!-- instead of marking optional, they pull this in -->
          <exclusion>
              <groupId>com.rabbitmq</groupId>
              <artifactId>amqp-client</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-healthchecks</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>
      <dependency>
        <groupId>io.dropwizard.metrics</groupId>
        <artifactId>metrics-jvm</artifactId>
        <version>${dep.metrics4.version}</version>
      </dependency>

      <!-- Apache httpclient -->
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${dep.apache-httpclient.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>${dep.apache-httpcore.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>


      <!-- Java APIs -->
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${dep.servlet-api.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>${dep.jaxrs-api.version}</version>
      </dependency>

      <!-- Removed from newer java versions -->
      <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${dep.javax-jaxb.version}</version>
        <exclusions>
          <exclusion>
            <groupId>javax.activation</groupId>
            <artifactId>javax.activation-api</artifactId>
          </exclusion>
        </exclusions>
      </dependency>


      <!-- runtime -->
      <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>${dep.glassfish-jaxb.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>${dep.javax-jaxws.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>javax.activation-api</artifactId>
        <version>${dep.javax-activation.version}</version>
      </dependency>


      <dependency>
        <groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>${dep.javax-annotation.version}</version>
      </dependency>

      <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>${dep.javamail.version}</version>
      </dependency>
      <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>${dep.javax.inject.version}</version>
      </dependency>

      <!-- Database related -->
      <dependency>
        <groupId>com.opentable.components</groupId>
        <artifactId>otj-sql</artifactId>
        <version>${dep.otj-sql.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jdbi</groupId>
        <artifactId>jdbi3-core</artifactId>
        <version>${dep.jdbi3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jdbi</groupId>
        <artifactId>jdbi3-guava</artifactId>
        <version>${dep.jdbi3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jdbi</groupId>
        <artifactId>jdbi3-sqlobject</artifactId>
        <version>${dep.jdbi3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jdbi</groupId>
        <artifactId>jdbi3-spring</artifactId>
        <version>${dep.jdbi3.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jdbi</groupId>
        <artifactId>jdbi3-postgres</artifactId>
        <version>${dep.jdbi3.version}</version>
      </dependency>

      <!-- Postgres -->
      <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>${dep.postgres-jdbc.version}</version>
      </dependency>

      <!-- MSSQL -->
      <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>${dep.mssql-jdbc.version}</version>
        <exclusions>
          <exclusion>
            <artifactId>azure-keyvault</artifactId>
            <groupId>com.microsoft.azure</groupId>
          </exclusion>
        </exclusions>
      </dependency>


      <!-- Mongo -->
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>${dep.mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-async</artifactId>
        <version>${dep.mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-core</artifactId>
        <version>${dep.mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>bson</artifactId>
        <version>${dep.mongo.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-reactivestreams</artifactId>
        <version>${dep.mongo-reactive.version}</version>
      </dependency>
      <dependency>
        <groupId>org.reactivestreams</groupId>
        <artifactId>reactive-streams</artifactId>
        <version>${dep.reactive-streams.version}</version>
      </dependency>
      <!-- Needed for pre 3.7 api. Spring data, a badly designed product needs this -->
      <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-legacy </artifactId>
        <version>${dep.mongo.version}</version>
      </dependency>

      <dependency>
        <groupId>org.flywaydb</groupId>
        <artifactId>flyway-core</artifactId>
        <version>${dep.flyway.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.spullara.mustache.java</groupId>
        <artifactId>compiler</artifactId>
        <version>${dep.mustache.version}</version>
      </dependency>

      <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>${dep.asm.version}</version>
      </dependency>

      <!-- Testing -->
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${dep.junit.version}</version>
      </dependency>
      <dependency>
        <groupId>org.easymock</groupId>
        <artifactId>easymock</artifactId>
        <version>${dep.easymock.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${dep.mockito.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.tomakehurst</groupId>
        <artifactId>wiremock</artifactId>
        <version>${dep.wiremock.version}</version>
      </dependency>

      <dependency>
        <groupId>net.jodah</groupId>
        <artifactId>failsafe</artifactId>
        <version>${dep.failsafe2.version}</version>
      </dependency>

      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-core</artifactId>
        <version>${dep.hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-library</artifactId>
        <version>${dep.hamcrest.version}</version>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy</artifactId>
        <version>${dep.bytebuddy.version}</version>
      </dependency>
      <dependency>
        <groupId>net.bytebuddy</groupId>
        <artifactId>byte-buddy-agent</artifactId>
        <version>${dep.bytebuddy.version}</version>
      </dependency>
      <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${dep.aspectjweaver.version}</version>
      </dependency>
      <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>${dep.assertj.version}</version>
      </dependency>
      <dependency>
        <groupId>org.objenesis</groupId>
        <artifactId>objenesis</artifactId>
        <version>${dep.objenesis.version}</version>
      </dependency>
      <dependency>
        <groupId>com.github.spotbugs</groupId>
        <artifactId>spotbugs-annotations</artifactId>
        <version>${dep.spotbugs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.code.findbugs</groupId>
        <artifactId>findbugs-annotations</artifactId>
        <version>${dep.findbugs.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.code.findbugs</groupId>
        <artifactId>jsr305</artifactId>
        <version>${dep.jsr305.version}</version>
      </dependency>

      <!-- spring-kafka -->
      <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
        <exclusions>
          <exclusion>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
          </exclusion>
        </exclusions>
        <version>${dep.spring-kafka.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka-test</artifactId>
        <exclusions>
          <exclusion>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
          </exclusion>
          <exclusion>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.11</artifactId>
          </exclusion>
        </exclusions>
        <version>${dep.spring-kafka.version}</version>
      </dependency>

    </dependencies>
  </dependencyManagement>

  <profiles>
    <!-- Disable git usage when sous is running -->
    <profile>
      <id>sous-build-is-running</id>
      <activation>
        <property>
          <name>env.BUILD_SOUS</name>
          <value>1</value>
        </property>
      </activation>
      <properties>
        <basepom.git-id.fail-no-info>false</basepom.git-id.fail-no-info>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.ekryd.echo-maven-plugin</groupId>
            <artifactId>echo-maven-plugin</artifactId>
            <version>${dep.plugin.echo.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>echo</goal>
                </goals>
                <phase>process-sources</phase>
              </execution>
            </executions>
            <configuration>
              <message>Sous build is running...</message>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!--
     We use maven profiles (see
https://maven.apache.org/guides/introduction/introduction-to
-profiles.html) to set the compiler configuration options of
source, target, and release (see
https://docs.oracle.com/javase/9/tools/javac.htm) based on
the JDK that is installed in your build environment, the
presence of signal files, and configuration properties that
are defined in the parent pom (but may be overridden in your
project's pom file).

If Java 8 is the installed JDK: We'll set source and target
to the value defined in the project.build.targetJdk property
(currently set in the parent pom to 1.8). Java 8 doesn't
have a release compiler option, so it won't be set.

If Java 9 or above is the installed JDK : We'll set
source and target to whatever is defined in
project.build.targetJdk (currently, 1.8) and we'll set
release to project.build.targetJdk as well, except we'll
drop whatever comes before the first decimal (if anything),
so 1.8 becomes 8 (which is the format that field requires),
and 9 will remain 9.

Notes: If the JDK in your build environment is of a lower
version than what you are targeting, the maven enforcer
plugin will fail the build.

Whatever version you target will need to be installed on the
machines of all team members who may build this project and
any CI build agents you are using (e.g. TeamCity or
Jenkins). So, if you set Java 9 as a target you'll need to
be OK with that.

Very old Maven compiler plugins have OR logic instead of AND
when evaluating conditions for profile activation. This can
cause problems here.
    -->
    <profile>
      <id>using-java-8-jdk</id>
      <activation>
        <jdk>[1.8,9.0)</jdk>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>com.github.ekryd.echo-maven-plugin</groupId>
            <artifactId>echo-maven-plugin</artifactId>
            <version>${dep.plugin.echo.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>echo</goal>
                </goals>
                <phase>process-sources</phase>
              </execution>
            </executions>
            <configuration>
              <message>Using Java 8 (Full) SDK</message>
            </configuration>
          </plugin>
          <!-- Use default inheritance from basePOM for now -->
        </plugins>
      </build>
    </profile>
    <profile>
      <id>using-java-9-or-higher</id>
      <activation>
        <jdk>[9,)</jdk>
      </activation>
      <build>
        <plugins>
          <!-- The entire purpose of this plugin is to convert 1.8 => 8 or more
      accurately simply strip pre decimal (including decimal point). This is used
      to build a correct release variable, since JavaC understands 8, 9, 10, etc
      but not 1.8 for the release argument -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>${dep.plugin.build-helper.version}</version>
            <executions>
              <execution>
                <id>fix-release-version</id>
                <phase>validate</phase>
                <goals>
                  <goal>regex-property</goal>
                </goals>
                <configuration>
                  <name>project.build.release</name>
                  <regex>^(\d*\.)</regex><!-- any numbers before and including decimal -->
                  <value>${project.build.targetJdk}</value>
                  <failIfNoMatch>false</failIfNoMatch>
                  <replacement /> <!-- replace with empty string -->
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.github.ekryd.echo-maven-plugin</groupId>
            <artifactId>echo-maven-plugin</artifactId>
            <version>${dep.plugin.echo.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>echo</goal>
                </goals>
                <phase>process-sources</phase>
              </execution>
            </executions>
            <configuration>
              <message>Using Java 9+ SDK (target ${project.build.targetJdk}, release ${project.build.release})</message>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${dep.plugin.compiler.version}</version>
            <configuration>
              <!-- Here we let the user decide -->
              <source>${project.build.targetJdk}</source>
              <target>${project.build.targetJdk}</target>
              <release>${project.build.release}</release>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!--
      This profile exists to disable SpotBugs on Java 11 or higher.
      Sadly significant false positives began to be seen in Java 9,10, and
      now they are further degrading the usefullness of this wonderful tool.
      Reenable should this project ever regain its legs
    -->
    <profile>
      <id>using-java-11-or-higher</id>
      <activation>
        <jdk>[11,)</jdk>
      </activation>
      <build>
        <!-- Don't fail due to spotbugs errors -->
        <plugins>
          <plugin>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-maven-plugin</artifactId>
            <configuration>
             <skip>true</skip>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!--
        This is activated for nearly all projects (ones missing the marker file below
        and simply sets up a default logback config for tests
    -->
    <profile>
      <id>test-log-config</id>
      <activation>
        <file>
          <missing>.no-test-log-config</missing>
        </file>
      </activation>
      <dependencies>
        <dependency>
          <groupId>com.opentable.testing</groupId>
          <artifactId>otj-test-log-config</artifactId>
          <version>${dep.otj-test-log-config.version}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>

   <!--
    Normally we want to include otj-spring to get a nice MBean clean up
    However doing so globally makes otj-spring itself have a cyclic dependency.
    This lets otj-spring avoid this trap. Clumsy, I will admit!
    Hence foundational libraries (otj-spring itself plus otj-core, otj-scopes, etc)
    need this marker file.
   -->
   <profile>
    <id>test-spring-otj</id>
    <activation>
      <file>
        <missing>.no-otj-spring</missing>
      </file>
    </activation>
     <dependencies>
       <dependency>
         <groupId>com.opentable.components</groupId>
         <artifactId>otj-spring</artifactId>
         <version>${dep.otj-spring.version}</version>
         <classifier>tests</classifier>
         <scope>test</scope>
       </dependency>
     </dependencies>
  </profile>

    <!-- ======================================================================== -->
    <!-- =                                                                      = -->
    <!-- = Service profile. Builds a tarball which is a deployable unit.        = -->
    <!-- =                                                                      = -->
    <!-- ======================================================================== -->
    <profile>
      <id>build-service</id>
      <activation>
        <file>
          <exists>.build-service</exists>
        </file>
      </activation>
      <properties>
      </properties>
      <build>
        <plugins>
          <!-- add in git.properties. We already add to manifest fwiw some of this -->
          <plugin>
            <groupId>pl.project13.maven</groupId>
            <artifactId>git-commit-id-plugin</artifactId>
            <version>${dep.plugin.git-commit-id.version}</version>
            <configuration>
              <generateGitPropertiesFile>true</generateGitPropertiesFile>
              <!-- Renamed so there aren't conflicts -->
              <generateGitPropertiesFilename>${project.build.outputDirectory}/${project.build.finalName}.git.properties</generateGitPropertiesFilename>
            </configuration>
          </plugin>
          <!-- Make shaded JAR. -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <dependencies>
              <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${dep.spring-boot.version}</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>assemble-app</id>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <shadedArtifactAttached>false</shadedArtifactAttached>
              <transformers combine.self="override">
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
                  <resource>META-INF/spring.factories</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
                <transformer implementation="org.basepom.maven.shade.CollectingManifestResourceTransformer">
                  <mainClass>${ot.mainclass}</mainClass>
                  <collectSections>true</collectSections>
                  <manifestEntries>
                    <X-BasePOM-Build-Id>${basepom.shaded.id}</X-BasePOM-Build-Id>
                    <X-BasePOM-Name>${project.name}</X-BasePOM-Name>
                    <X-BasePOM-Git-Commit-Id>${git.commit.id}</X-BasePOM-Git-Commit-Id>
                  </manifestEntries>
                </transformer>
              </transformers>
            </configuration>
          </plugin>

          <!-- Require main class property. -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-enforcer-plugin</artifactId>
            <executions>
              <execution>
                <id>check-service-build</id>
                <phase>validate</phase>
                <goals>
                  <goal>enforce</goal>
                </goals>
                <configuration>
                  <rules>
                    <requireProperty>
                      <property>ot.mainclass</property>
                      <message>You must specify "ot.mainclass" as a Maven property for a service-enabled build.</message>
                    </requireProperty>
                  </rules>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${dep.plugin.exec.version}</version>
            <executions>
              <execution>
                <id>build-docker</id>
                <phase>deploy</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <executable>otpl-package-docker</executable>
                  <arguments>
                    <argument>${project.artifactId}</argument>
                    <argument>${otpl.docker.tag}</argument>
                    <argument>${project.build.directory}/${project.build.finalName}.jar</argument>
                    <argument>${project.version}</argument>
                    <argument>${otj.parent.pom.version}</argument>
                    <argument>${otpl.docker.uid}</argument>
                  </arguments>
                  <workingDirectory>${otpl.project.dir}</workingDirectory>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- This profile is active when *not* building for OSS -->
    <profile>
      <id>internal-build</id>
      <activation>
        <file>
          <missing>.oss-build</missing>
        </file>
      </activation>

      <!-- use ot repos to upload jars, images -->
      <distributionManagement>
        <snapshotRepository>
          <id>opentable.snapshot</id>
          <name>opentable-snapshots</name>
          <uniqueVersion>true</uniqueVersion>
          <url>https://artifactory.otenv.com/snapshots</url>
        </snapshotRepository>
        <repository>
          <id>opentable</id>
          <name>opentable-internal</name>
          <url>https://artifactory.otenv.com/internal</url>
          <uniqueVersion>false</uniqueVersion>
        </repository>
      </distributionManagement>
    </profile>

    <!-- This profile ports basepom-oss into our spring pom
         It is typically used for our open source projects.
     -->
    <profile>
      <id>oss-build</id>
      <activation>
        <file>
          <exists>.oss-build</exists>
        </file>
      </activation>

      <!-- note the main difference is released artifacts go to oss.sonatype instead of internal -->
      <distributionManagement>
        <snapshotRepository>
          <id>opentable.snapshot</id>
          <name>opentable-snapshots</name>
          <uniqueVersion>true</uniqueVersion>
          <url>https://artifactory.otenv.com/snapshots</url>
        </snapshotRepository>
        <repository>
          <id>sonatype-nexus-staging</id>
          <name>Nexus Release Repository</name>
          <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
      </distributionManagement>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-release-plugin</artifactId>
              <configuration>
                <!-- activate some basepom stuff, this binds the profile below -->
                <releaseProfiles>${basepom.release.profiles}</releaseProfiles>
              </configuration>
            </plugin>

            <!-- checks for valid OSS license stuff and headers -->
            <plugin>
              <groupId>com.mycila</groupId>
              <artifactId>license-maven-plugin</artifactId>
              <version>${dep.plugin.license.version}</version>
              <dependencies>
                <dependency>
                  <groupId>org.basepom</groupId>
                  <artifactId>basepom-policy</artifactId>
                  <version>${dep.basepom-policy.version}</version>
                </dependency>
              </dependencies>
              <configuration>
                <skip>${basepom.check.skip-license}</skip>
                <skipExistingHeaders>${basepom.license.skip-existing}</skipExistingHeaders>
                <failIfMissing>${basepom.check.fail-license}</failIfMissing>
                <header>license/basepom-apache-license-header.txt</header>
                <headerDefinitions>
                  <headerDefinition>license/xml-prefix.xml</headerDefinition>
                </headerDefinitions>
                <mapping>
                  <xml>XML_PREFIX</xml>
                  <java>SLASHSTAR_STYLE</java>
                  <yaml>SCRIPT_STYLE</yaml>
                </mapping>
                <strictCheck>true</strictCheck>
                <aggregate>true</aggregate>
                <useDefaultExcludes>true</useDefaultExcludes>
                <encoding>${project.build.sourceEncoding}</encoding>
                <excludes>
                  <exclude>.*/**</exclude>
                  <exclude>**/*.md</exclude>
                  <exclude>**/*.rst</exclude>
                  <exclude>**/*.adoc</exclude>
                  <exclude>**/*.sh</exclude>
                  <exclude>**/*.txt</exclude>
                  <exclude>**/*.thrift</exclude>
                  <exclude>**/*.proto</exclude>
                  <exclude>**/*.g</exclude>
                  <exclude>**/*.releaseBackup</exclude>
                  <exclude>**/*.vm</exclude>
                  <exclude>**/*.st</exclude>
                  <exclude>**/*.raw</exclude>
                  <exclude>**/*.ser</exclude>
                  <exclude>**/src/license/**</exclude>
                </excludes>
                <includes>
                  <include>src/**</include>
                  <include>**/pom.xml</include>
                </includes>
              </configuration>
            </plugin>

            <!-- sign with gpg -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-gpg-plugin</artifactId>
              <version>${dep.plugin.gpg.version}</version>
              <configuration>
                <useAgent>true</useAgent>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>

        <!-- more license checking. One day I'll know why both of these -->
        <plugins>
          <plugin>
            <groupId>com.mycila</groupId>
            <artifactId>license-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>basepom.default</id>
                <phase>${basepom.check.phase-license}</phase>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- Active during OSS release:perform -->
    <profile>
      <id>basepom.oss-release</id>
      <properties>
        <!-- tests run in the preparation step of the release -->
        <skipTests>true</skipTests>
      </properties>
      <build>
        <plugins>
          <!-- oss requires a javadoc jar. Build one when releasing. -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <!-- if necessary, build a scaladoc jar. Disabled by default. -->
          <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-scaladocs</id>
                <phase>package</phase>
                <configuration>
                  <skip>${basepom.oss.skip-scala-doc}</skip>
                </configuration>
                <goals>
                  <goal>doc-jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <!-- Sign artifacts using gpg for oss upload -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>basepom.sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
