<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You 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>
    <artifactId>spring-boot</artifactId>
    <groupId>org.apache.camel</groupId>
    <version>3.0.0-M1</version>
  </parent>

  <artifactId>camel-spring-boot-dm</artifactId>
  <packaging>pom</packaging>
  <name>Camel :: Platforms :: Spring-Boot :: Dependency Management</name>

  <modules>
    <module>camel-spring-boot-dependencies-generator</module>
    <module>camel-spring-boot-dependencies</module>
    <module>camel-starter-parent</module>
  </modules>

  <properties>
    <!-- Spring-Boot target version -->
    <spring-boot-version>2.1.2.RELEASE</spring-boot-version>

    <!-- The following dependencies should be aligned with the ones in standard camel parent -->
    <!-- Needed by BOM generator-->
    <avro-version>1.8.2</avro-version>
    <jackson-version>1.9.12</jackson-version>
    <testcontainers-version>1.9.1</testcontainers-version>

    <!-- needed for testing -->
    <curator-version>2.12.0</curator-version>

    <!-- Needed by starters -->
    <egit-github-core-version>2.1.5</egit-github-core-version>
    <google-guava-version>19.0</google-guava-version>
    <lucene3-version>3.6.0</lucene3-version>
    <hadoop2-version>2.7.4</hadoop2-version>
    <infinispan-spring-boot-version>2.0.0.Final</infinispan-spring-boot-version>
    <cassandra-driver-guava-version>18.0</cassandra-driver-guava-version>
    <groovy-version>2.5.3</groovy-version>
    <grpc-guava-version>20.0</grpc-guava-version>

    <!-- Plugin versions -->
    <maven-checkstyle-plugin-version>3.0.0</maven-checkstyle-plugin-version>
    <maven-checkstyle-version>7.6.1</maven-checkstyle-version>

    <camel.osgi.manifest />
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <executions>
          <execution>
            <id>versions</id>
            <phase />
          </execution>
          <execution>
            <id>bundle-manifest</id>
            <phase />
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin-version}</version>
        <configuration>
          <source>${jdk.version}</source>
          <target>${jdk.version}</target>
          <maxmem>512M</maxmem>
          <fork>${compiler.fork}</fork>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <attach>true</attach>
          <source>${jdk.version}</source>
          <quiet>true</quiet>
          <bottom>Apache Camel</bottom>
          <detectOfflineLinks>false</detectOfflineLinks>
          <javadocVersion>${jdk.version}</javadocVersion>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>

    </plugins>
  </build>

</project>
