<?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.quarkus</groupId>
        <artifactId>camel-quarkus-build-parent</artifactId>
        <version>1.1.0-SNAPSHOT</version>
        <relativePath>../poms/build-parent/pom.xml</relativePath>
    </parent>

    <artifactId>camel-quarkus-integration-tests</artifactId>
    <packaging>pom</packaging>

    <name>Camel Quarkus :: Integration Tests</name>

    <properties>
        <quarkus.banner.enabled>false</quarkus.banner.enabled>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel.quarkus</groupId>
            <artifactId>camel-quarkus-support-policy</artifactId><!-- enforce the policy in all tests -->
        </dependency>
    </dependencies>

    <modules>
        <!-- build those first -->
        <module>support</module>
        <module>core</module>
        <module>core-main</module>
        <module>core-main-xml-jaxb</module>
        <module>core-main-xml-io</module>
        <module>core-main-collector</module>
        <module>core-main-caffeine-lrucache</module>
        <module>core-impl</module>

        <!-- extensions a..z; do not remove this comment, it is important when sorting via  mvn process-resources -Pformat -->
        <module>activemq</module>
        <module>amqp</module>
        <module>aws</module>
        <module>azure</module>
        <module>base64</module>
        <module>bean</module>
        <module>bean-validator</module>
        <module>bindy</module>
        <module>box</module>
        <module>braintree</module>
        <module>compression</module>
        <module>consul</module>
        <module>controlbus</module>
        <module>csv</module>
        <module>dataformat</module>
        <module>dataformats-json</module>
        <module>dozer</module>
        <module>exec</module>
        <module>fhir</module>
        <module>file</module>
        <module>ftp</module>
        <module>github</module>
        <module>google</module>
        <module>graphql</module>
        <module>http</module>
        <module>hystrix</module>
        <module>infinispan</module>
        <module>jaxb</module>
        <module>jdbc</module>
        <module>jira</module>
        <module>jsonpath</module>
        <module>kafka</module>
        <module>mail</module>
        <module>messaging</module>
        <module>microprofile</module>
        <module>mongodb</module>
        <module>mustache</module>
        <module>netty</module>
        <module>olingo4</module>
        <module>opentracing</module>
        <module>pdf</module>
        <module>platform-http</module>
        <module>platform-http-engine</module>
        <module>quartz</module>
        <module>qute</module>
        <module>reactive-streams</module>
        <module>ref</module>
        <module>rest-binding-mode-xml</module>
        <module>salesforce</module>
        <module>scheduler</module>
        <module>seda</module>
        <module>servicenow</module>
        <module>servlet</module>
        <module>slack</module>
        <module>soap</module>
        <module>sql</module>
        <module>stream</module>
        <module>tarfile</module>
        <module>telegram</module>
        <module>twitter</module>
        <module>validator</module>
        <module>websocket-jsr356</module>
        <module>xml</module>
        <module>xstream</module>
    </modules>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>io.quarkus</groupId>
                    <artifactId>quarkus-maven-plugin</artifactId>
                    <version>${quarkus.version}</version>
                    <configuration>
                        <!-- this is needed to make hot-reload working in multi-module projects-->
                        <noDeps>true</noDeps>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemProperties>
                            <quarkus.http.test-port>${test.http.port.jvm}</quarkus.http.test-port>
                        </systemProperties>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <configuration>
                                <systemProperties>
                                    <quarkus.http.test-port>${test.http.port.native}</quarkus.http.test-port>
                                </systemProperties>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>${build-helper-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>reserve-network-port</id>
                        <goals>
                            <goal>reserve-network-port</goal>
                        </goals>
                        <phase>process-resources</phase>
                        <configuration>
                            <portNames>
                                <portName>test.http.port.jvm</portName>
                                <portName>test.http.port.native</portName>
                            </portNames>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
