<?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>2.23.2</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.0.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>

  </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>default-cli</id>
            <phase>validate</phase>
            <configuration>
              <includeResources>false</includeResources>
              <configLocation>camel-checkstyle.xml</configLocation>
              <consoleOutput>true</consoleOutput>
              <failsOnError>${checkstyle.failOnViolation}</failsOnError>
              <linkXRef>false</linkXRef>
              <suppressionsLocation>camel-checkstyle-suppressions.xml</suppressionsLocation>
              <encoding>UTF-8</encoding>
              <sourceDirectories>
                <sourceDirectory>${basedir}/src</sourceDirectory>
              </sourceDirectories>
              <headerLocation>header-java.txt</headerLocation>
              <includes>**/*.java,**/*.groovy,**/*.scala,**/*.properties,**/*.xml,**/*.xsd</includes>
              <excludes>**/archetype-resources/**/*.java,**/archetype-resources/**/*.groovy,**/archetype-resources/**/*.scala,**/archetype-resources/**/*.xml,**/org/json/simple/**/*.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>
