<?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>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>tooling</artifactId>
        <version>3.10.0</version>
    </parent>

    <artifactId>camel-starter-parent</artifactId>
    <packaging>pom</packaging>
    <name>Camel SB Tooling :: 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.springboot</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.springboot</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>
                        <version>3.1.1</version>
                    </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>
