<?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-M3</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.5.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>1.8.0</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>
