<?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>
    <groupId>org.apache.camel.k</groupId>
    <artifactId>camel-k-runtime-parent</artifactId>
    <version>0.2.0</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <camel.version>2.23.1</camel.version>
        <junit.version>4.12</junit.version>
        <junit-jupiter.version>5.3.2</junit-jupiter.version>
        <joor.version>0.9.10</joor.version>
        <commons-io.version>2.6</commons-io.version>
        <commons-lang.version>3.8.1</commons-lang.version>
        <commons-collections4.version>4.2</commons-collections4.version>
        <assertj.version>3.11.1</assertj.version>
        <log4j2.version>2.11.1</log4j2.version>
        <slf4j.version>1.7.25</slf4j.version>
        <groovy.version>2.5.5</groovy.version>
        <kotlin.version>1.3.11</kotlin.version>
        <snakeyaml.version>1.23</snakeyaml.version>
        <spock.version>1.2-groovy-2.5</spock.version>
        <jackson.version>2.9.8</jackson.version>
        <spring-boot.version>2.1.0.RELEASE</spring-boot.version>
        <gmavenplus-plugin.version>1.6.1</gmavenplus-plugin.version>
        <fabric8-maven-plugin.version>3.5.40</fabric8-maven-plugin.version>
        <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version>
        <maven-surefire-plugin.version>2.22.1</maven-surefire-plugin.version>
        <versions-maven-plugin.version>2.7</versions-maven-plugin.version>
        <directory-maven-plugin.version>0.3.1</directory-maven-plugin.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-bom</artifactId>
                <version>${camel.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>fabric8-maven-plugin</artifactId>
                    <version>${fabric8-maven-plugin.version}</version>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <compilerArgs>
                            <arg>-Xlint:deprecation</arg>
                        </compilerArgs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <modules>
        <module>camel-k-maven-plugin</module>
        <module>camel-k-runtime-core</module>
        <module>camel-k-runtime-jvm</module>
        <module>camel-k-runtime-groovy</module>
        <module>camel-k-runtime-kotlin</module>
        <module>camel-k-runtime-yaml</module>
        <module>camel-k-runtime-spring-boot</module>
        <module>camel-knative-http</module>
        <module>camel-knative</module>
    </modules>

    <profiles>
        <profile>
            <id>deps</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <build>
                <defaultGoal>initialize versions:display-dependency-updates</defaultGoal>
                <plugins>
                    <plugin>
                        <groupId>org.commonjava.maven.plugins</groupId>
                        <artifactId>directory-maven-plugin</artifactId>
                        <version>${directory-maven-plugin.version}</version>
                        <executions>
                            <execution>
                                <id>directories</id>
                                <goals>
                                    <goal>highest-basedir</goal>
                                </goals>
                                <phase>initialize</phase>
                                <configuration>
                                    <property>camel-k.project.root</property>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <version>${versions-maven-plugin.version}</version>
                        <configuration>
                            <rulesUri>file:///${camel-k.project.root}/.maven-versions-rules.xml</rulesUri>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
