<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2017 Red Hat, Inc, and individual contributors.

 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>

  <groupId>me.snowdrop</groupId>
  <artifactId>spring-boot-bom</artifactId>
  <version>1.5.19.SP1</version>
  <packaging>pom</packaging>

  <name>Snowdrop Spring Boot BOM</name>
  <description>Bill Of Materials (BOM) file for Snowdrop project to facilitate usage of Spring Boot on OpenShift.</description>
  <url>http://www.snowdrop.me</url>

  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.jboss.org/projects/SB/summary</url>
  </issueManagement>

  <developers>
    <developer>
      <id>jboss.org</id>
      <name>JBoss.org Community</name>
      <organization>JBoss.org</organization>
      <organizationUrl>http://www.jboss.org</organizationUrl>
    </developer>
    <developer>
      <id>alesj</id>
      <name>Aleš Justin</name>
    </developer>
    <developer>
      <id>cmoulliard</id>
      <name>Charles Moulliard</name>
      <organization>Red Hat Inc.</organization>
      <organizationUrl>https://www.redhat.com</organizationUrl>
    </developer>
    <developer>
      <id>gytis</id>
      <name>Gytis Trikleris</name>
      <organization>Red Hat Inc.</organization>
      <organizationUrl>https://www.redhat.com</organizationUrl>
    </developer>
    <developer>
      <id>metacosm</id>
      <name>Christophe Laprun</name>
      <organization>Red Hat Inc.</organization>
      <organizationUrl>https://www.redhat.com</organizationUrl>
    </developer>
    <developer>
      <id>michalszynkiewicz</id>
      <name>Michał Szynkiewicz</name>
      <organization>Red Hat Inc.</organization>
      <organizationUrl>https://www.redhat.com</organizationUrl>
    </developer>
    <developer>
      <id>geoand</id>
      <name>Georgios Andrianakis</name>
      <organization>Red Hat Inc.</organization>
      <organizationUrl>https://www.redhat.com</organizationUrl>
    </developer>
  </developers>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <scm>
    <url>https://github.com/snowdrop</url>
    <connection>scm:git:https://github.com/snowdrop/spring-boot-bom.git</connection>
    <developerConnection>scm:git:git@github.com:snowdrop/spring-boot-bom.git</developerConnection>
    <tag>1.5.19.SP1</tag>
  </scm>


  <profiles>
    <profile>
      <id>release</id>
      <distributionManagement>
        <snapshotRepository>
          <id>ossrh</id>
          <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
          <id>ossrh</id>
          <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
      </distributionManagement>

      <build>
        <plugins>
          <plugin>
            <!--See http://central.sonatype.org/pages/apache-maven.html for more information -->
            <groupId>org.sonatype.plugins</groupId>
            <artifactId>nexus-staging-maven-plugin</artifactId>
            <version>1.6.8</version>
            <extensions>true</extensions>
            <configuration>
              <serverId>ossrh</serverId>
              <nexusUrl>https://oss.sonatype.org/</nexusUrl>
              <autoReleaseAfterClose>true</autoReleaseAfterClose>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
            <version>1.6</version>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals>
                  <goal>sign</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
              <autoVersionSubmodules>true</autoVersionSubmodules>
              <useReleaseProfile>false</useReleaseProfile>
              <releaseProfiles>release</releaseProfiles>
              <goals>deploy</goals>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <properties>
    <!-- Other -->
    <cxf-spring-boot-starter-jaxrs.version>3.2.7</cxf-spring-boot-starter-jaxrs.version>
    <keycloak.version>3.4.3.Final</keycloak.version> <!-- Community version aligned on Red Hat SSO 7.2 -->
    <opentracing-spring-jaeger-web-starter.version>0.2.2</opentracing-spring-jaeger-web-starter.version>
    <infinispan-starter.version>1.0.7.Final</infinispan-starter.version>
    <amqp-10-starter.version>1.0.0</amqp-10-starter.version>
    <narayana-starter.version>1.0.1</narayana-starter.version>

    <!-- Spring Ecosystem -->
    <spring-boot.version>1.5.19.RELEASE</spring-boot.version>
    <spring-cloud-kubernetes.version>0.2.1.RELEASE</spring-cloud-kubernetes.version>

    <!-- Overriden from Spring Boot -->
    <hibernate.version>5.1.10.Final</hibernate.version> <!-- Aligned on EAP 7.1, SB uses 5.0.12.Final -->
    <hibernate-validator.version>5.3.5.Final</hibernate-validator.version> <!-- Aligned on EAP 7.1, SB uses 5.3.6.Final -->
    <infinispan.version>9.4.11.Final</infinispan.version>
    <tomcat.version>8.5.38</tomcat.version>
    <undertow.version>1.4.26.Final</undertow.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <!-- Infinispan BOM to ensure Infinispan versions are properly set. NEEDS TO BE SET BEFORE SPRING BOM. -->
      <dependency>
        <groupId>org.infinispan</groupId>
        <artifactId>infinispan-bom</artifactId>
        <version>${infinispan.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- Spring Boot BOM: NOT SUPPORTED, just included to ensure dependencies are properly set -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- ONLY the following Spring Boot Starters are supported -->

      <!-- Core -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>${spring-boot.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>${spring-boot.version}</version>
        <exclusions>
          <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
          </exclusion>
        </exclusions>
        <scope>test</scope>
      </dependency>

      <!-- HTTP runtime -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!-- Web -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!-- Websocket -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!-- JAX-RS -->
      <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
        <version>${cxf-spring-boot-starter-jaxrs.version}</version>
      </dependency>

      <!-- Persistence -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!--Monitoring -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!-- Distributed tracing with OpenTracing -->
      <dependency>
        <groupId>io.opentracing.contrib</groupId>
        <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
        <version>${opentracing-spring-jaeger-web-starter.version}</version>
      </dependency>

      <!-- Spring Cloud Kubernetes -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes</artifactId>
        <version>${spring-cloud-kubernetes.version}</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
        <version>${spring-cloud-kubernetes.version}</version>
      </dependency>

      <!-- Cache / Data Grid -->
      <dependency>
        <groupId>org.infinispan</groupId>
        <artifactId>infinispan-spring-boot-starter-embedded</artifactId>
        <version>${infinispan-starter.version}</version>
      </dependency>
      <dependency>
        <groupId>org.infinispan</groupId>
        <artifactId>infinispan-spring-boot-starter-remote</artifactId>
        <version>${infinispan-starter.version}</version>
      </dependency>

      <!-- Messaging -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-artemis</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!-- AMQP -->
      <dependency>
        <groupId>org.amqphub.spring</groupId>
        <artifactId>amqp-10-jms-spring-boot-starter</artifactId>
        <version>${amqp-10-starter.version}</version>
      </dependency>

      <!-- Transactions -->
      <dependency>
        <groupId>me.snowdrop</groupId>
        <artifactId>narayana-spring-boot-starter</artifactId>
        <version>${narayana-starter.version}</version>
      </dependency>

      <!-- Security -->
      <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
        <version>${keycloak.version}</version>
      </dependency>

      <!-- Validation -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
        <version>${spring-boot.version}</version>
      </dependency>

      <!-- End of supported starters -->


      <!-- Needed dependencies, not directly supported, use starters instead -->

      <!-- Hibernate -->
      <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>${hibernate-validator.version}</version>
      </dependency>
      <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jta_1.1_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>${hibernate.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-jta_1.1_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>

      <!-- Tomcat -->
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>${tomcat.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-el</artifactId>
        <version>${tomcat.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <version>${tomcat.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-websocket</artifactId>
        <version>${tomcat.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jdbc</artifactId>
        <version>${tomcat.version}</version>
      </dependency>

      <!-- Undertow -->
      <dependency>
        <groupId>io.undertow</groupId>
        <artifactId>undertow-core</artifactId>
        <version>${undertow.version}</version>
      </dependency>
      <dependency>
        <groupId>io.undertow</groupId>
        <artifactId>undertow-servlet</artifactId>
        <version>${undertow.version}</version>
        <exclusions>
          <exclusion>
            <groupId>org.jboss.spec.javax.servlet</groupId>
            <artifactId>jboss-servlet-api_3.1_spec</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      <dependency>
        <groupId>io.undertow</groupId>
        <artifactId>undertow-websockets-jsr</artifactId>
        <version>${undertow.version}</version>
      </dependency>

    </dependencies>
  </dependencyManagement>
</project>
