<?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>camel-spring-boot-dm</artifactId>
    <groupId>org.apache.camel</groupId>
    <version>2.23.0</version>
  </parent>

  <artifactId>camel-starter-parent</artifactId>
  <packaging>pom</packaging>
  <name>Camel :: Platforms :: Spring-Boot :: Dependency Management :: Starter Parent</name>

  <dependencies>
    <!-- Dependencies added for all starters -->

    <!-- Logback is the default logging implementation in spring-boot but it doesn't provide the log4j2 binding -->
    <!-- Not a problem for now -->
    <!--<dependency>-->
    <!--<groupId>org.apache.logging.log4j</groupId>-->
    <!--<artifactId>log4j-to-slf4j</artifactId>-->
    <!--<version>${log4j2-version}</version>-->
    <!--</dependency>-->

    <!-- Force the reactor build order -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring-boot-dependencies</artifactId>
      <version>${project.version}</version>
      <type>pom</type>
      <scope>provided</scope>
    </dependency>

  </dependencies>

  <dependencyManagement>

    <dependencies>

      <!-- The spring-boot dependencies will be used by end users, so it's ok to use it in the parent -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot-version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- What's in the user BOM is OK for the parent -->
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring-boot-dependencies</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <!-- Forcing Hadoop in starters -->
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-auth</artifactId>
        <version>${hadoop2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>${hadoop2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-yarn-common</artifactId>
        <version>${hadoop2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-annotations</artifactId>
        <version>${hadoop2-version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>${hadoop2-version}</version>
      </dependency>

      <!-- Netty cannot be forced at the moment -->

      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-all</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-buffer</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-codec-http</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-codec</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-handler</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-transport-native-epoll</artifactId>-->
      <!--<classifier>linux-x86_64</classifier>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-common</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-resolver</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->
      <!--<dependency>-->
      <!--<groupId>io.netty</groupId>-->
      <!--<artifactId>netty-transport</artifactId>-->
      <!--<version>${netty-version}</version>-->
      <!--</dependency>-->

    </dependencies>
  </dependencyManagement>

  <profiles>
    <profile>
      <id>nochecks</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
    </profile>

    <profile>
      <id>fastinstall</id>
      <activation>
        <property>
          <name>fastinstall</name>
        </property>
      </activation>
      <properties>
        <maven.test.skip.exec>true</maven.test.skip.exec>
        <assembly.skipAssembly>true</assembly.skipAssembly>
        <noassembly>true</noassembly>
      </properties>
    </profile>

    <profile>
      <id>sourcecheck</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>dependencycheck</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.owasp</groupId>
            <artifactId>dependency-check-maven</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
