<?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">
    <parent>
        <artifactId>camel</artifactId>
        <groupId>org.apache.camel</groupId>
        <version>2.18.1-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>camel-spring-boot-dm</artifactId>
    <packaging>pom</packaging>

    <name>Camel :: Spring-Boot :: Dependency Management</name>
    <description>Camel Spring-Boot Dependency Management POM</description>
    <modules>
        <module>camel-spring-boot-generator-bom</module>
        <module>camel-spring-boot-dependencies</module>
        <module>camel-starter-parent</module>
    </modules>

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

        <!-- The following dependencies should be aligned with the ones in standard camel parent -->
        <avro-version>1.8.1</avro-version>
        <cassandra-driver-guava-version>18.0</cassandra-driver-guava-version>
        <jackson-version>1.9.12</jackson-version>

        <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>
        <scala-version>2.11.7</scala-version>
        <scalaxml-version>1.0.4</scalaxml-version>

        <maven-checkstyle-plugin-version>2.17</maven-checkstyle-plugin-version>
        <maven-checkstyle-version>6.17</maven-checkstyle-version>

        <arquillian-version>1.1.11.Final</arquillian-version>
        <hadoop2-version>2.7.2</hadoop2-version>

        <!-- Custom dependency required by some modules -->
        <ahc-netty-version>4.0.40.Final</ahc-netty-version>
        <cassandra-netty-version-testing>4.0.37.Final</cassandra-netty-version-testing>

        <!-- The following versions should be aligned with the ones in spring-boot-repo/spring-boot-dependencies/pom.xml (for the targeted version of spring-boot) -->
        <jackson2-version>2.8.3</jackson2-version>
        <scala-jackson2-version>2.8.2</scala-jackson2-version>
        <jetty9-version>9.3.11.v20160721</jetty9-version>
        <jetty-version>${jetty9-version}</jetty-version>
        <jna-version>4.2.2</jna-version>
        <hazelcast-version>3.6.5</hazelcast-version>
        <htmlunit-version>2.21</htmlunit-version>
        <log4j2-version>2.6.2</log4j2-version>
        <slf4j-version>1.7.21</slf4j-version>
        <spring-version>4.3.3.RELEASE</spring-version>
        <spring-data-releasetrain-version>Hopper-SR3</spring-data-releasetrain-version>
        <spring-integration-version>4.3.2.RELEASE</spring-integration-version>
        <spring-security-version>4.1.3.RELEASE</spring-security-version>
    </properties>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>${maven-checkstyle-plugin-version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-buildtools</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>com.puppycrawl.tools</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${maven-checkstyle-version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>validate</id>
                        <phase>validate</phase>
                        <configuration>
                            <includeResources>false</includeResources>
                            <configLocation>camel-checkstyle.xml</configLocation>
                            <consoleOutput>true</consoleOutput>
                            <failsOnError>true</failsOnError>
                            <linkXRef>false</linkXRef>
                            <suppressionsLocation>camel-checkstyle-suppressions.xml</suppressionsLocation>
                            <encoding>UTF-8</encoding>
                            <sourceDirectory>${basedir}/src</sourceDirectory>
                            <excludes>**/archetype-resources/**/*.java</excludes>
                        </configuration>
                        <goals>
                            <goal>checkstyle</goal>
                        </goals>
                    </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>
