<?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</artifactId>
        <version>2.11.1-SNAPSHOT</version>
        <relativePath>../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>

    <modules>
        <!-- build those first -->
        <module>foundation-grouped</module>
        <module>core-discovery-disabled</module>
        <module>main</module>
        <module>main-devmode</module>
        <module>main-discovery-disabled</module>
        <module>main-xml-jaxb</module>
        <module>main-xml-io</module>
        <module>main-collector</module>
        <module>main-caffeine-lrucache</module>
        <module>main-command-mode</module>
        <module>main-unknown-args-fail</module>
        <module>main-unknown-args-ignore</module>
        <module>main-yaml</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>arangodb</module>
        <module>as2</module>
        <module>atlasmap</module>
        <module>avro</module>
        <module>avro-rpc</module>
        <module>aws2</module>
        <module>aws2-grouped</module>
        <module>aws2-quarkus-client-grouped</module>
        <module>azure-grouped</module>
        <module>base64</module>
        <module>bean-validator</module>
        <module>bindy</module>
        <module>box</module>
        <module>braintree</module>
        <module>caffeine</module>
        <module>cassandraql</module>
        <module>cbor</module>
        <module>compression-grouped</module>
        <module>consul</module>
        <module>couchdb</module>
        <module>crypto</module>
        <module>csimple</module>
        <module>csv</module>
        <module>dataformat</module>
        <module>dataformats-json</module>
        <module>datasonnet</module>
        <module>debezium</module>
        <module>digitalocean</module>
        <module>disruptor</module>
        <module>dozer</module>
        <module>dropbox</module>
        <module>elasticsearch-rest</module>
        <module>exec</module>
        <module>fhir</module>
        <module>file</module>
        <module>flatpack</module>
        <module>fop</module>
        <module>freemarker</module>
        <module>ftp</module>
        <module>geocoder</module>
        <module>git</module>
        <module>github</module>
        <module>google</module>
        <module>google-bigquery</module>
        <module>google-pubsub</module>
        <module>google-storage</module>
        <module>graphql</module>
        <module>grok</module>
        <module>grpc</module>
        <module>hazelcast</module>
        <module>headersmap</module>
        <module>hl7</module>
        <module>http</module>
        <module>infinispan</module>
        <module>influxdb</module>
        <module>jackson-avro</module>
        <module>jackson-protobuf</module>
        <module>jaxb</module>
        <module>jdbc</module>
        <module>jfr</module>
        <module>jira</module>
        <module>jms-artemis-client</module>
        <module>jms-qpid-amqp-client</module>
        <module>jolt</module>
        <module>jpa</module>
        <module>jq</module>
        <module>js-dsl</module>
        <module>jsch</module>
        <module>jslt</module>
        <module>json-validator</module>
        <module>jsonata</module>
        <module>jsonpath</module>
        <module>jta</module>
        <module>kafka</module>
        <module>kafka-oauth</module>
        <module>kafka-sasl</module>
        <module>kafka-sasl-ssl</module>
        <module>kafka-ssl</module>
        <module>kamelet</module>
        <module>kotlin</module>
        <module>kubernetes</module>
        <module>kudu</module>
        <module>leveldb</module>
        <module>lra</module>
        <module>lumberjack</module>
        <module>mail</module>
        <module>master</module>
        <module>messaging</module>
        <module>micrometer</module>
        <module>microprofile</module>
        <module>minio</module>
        <module>mllp</module>
        <module>mongodb-grouped</module>
        <module>mustache</module>
        <module>mybatis</module>
        <module>nats</module>
        <module>netty</module>
        <module>nitrite</module>
        <module>oaipmh</module>
        <module>olingo4</module>
        <module>openapi-java</module>
        <module>openstack</module>
        <module>opentelemetry</module>
        <module>opentracing</module>
        <module>optaplanner</module>
        <module>paho</module>
        <module>paho-mqtt5</module>
        <module>pdf</module>
        <module>pg-replication-slot</module>
        <module>pgevent</module>
        <module>platform-http</module>
        <module>protobuf</module>
        <module>pubnub</module>
        <module>quartz</module>
        <module>quartz-clustered</module>
        <module>qute</module>
        <module>rabbitmq</module>
        <module>reactive-streams</module>
        <module>rest</module>
        <module>rest-openapi</module>
        <module>saga</module>
        <module>salesforce</module>
        <module>sap-netweaver</module>
        <module>saxon</module>
        <module>servicenow</module>
        <module>servlet</module>
        <module>shiro</module>
        <module>sjms-artemis-client</module>
        <module>sjms-qpid-amqp-client</module>
        <module>sjms2-artemis-client</module>
        <module>sjms2-qpid-amqp-client</module>
        <module>slack</module>
        <module>smallrye-reactive-messaging</module>
        <module>soap</module>
        <module>solr</module>
        <module>splunk</module>
        <module>spring-rabbitmq</module>
        <module>sql</module>
        <module>ssh</module>
        <module>stax</module>
        <module>stringtemplate</module>
        <module>syndication</module>
        <module>syslog</module>
        <module>tarfile</module>
        <module>telegram</module>
        <module>tika</module>
        <module>twilio</module>
        <module>twitter</module>
        <module>univocity-parsers</module>
        <module>validator</module>
        <module>velocity</module>
        <module>vertx</module>
        <module>vertx-websocket</module>
        <module>weather</module>
        <module>xchange</module>
        <module>xml</module>
        <module>xmlsecurity</module>
        <module>xpath</module>
        <module>xstream</module>
        <module>zendesk</module>
    </modules>

</project>
