<?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.22.3</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.0.3.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.7.3</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.Beta1</infinispan-spring-boot-version>
    <cassandra-driver-guava-version>18.0</cassandra-driver-guava-version>
    <groovy-version>2.4.15</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>
