<?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>3.9.1-SNAPSHOT</version>
        <relativePath>../poms/build-parent/pom.xml</relativePath>
    </parent>

    <artifactId>camel-quarkus-extensions-jvm</artifactId>
    <packaging>pom</packaging>

    <name>Camel Quarkus :: Extensions JVM</name>
    <description>Autogenerated extensions not yet tested in the native mode</description>

    <modules>
        <!-- extensions a..z; do not remove this comment, it is important when sorting via  mvn process-resources -Pformat -->
        <module>asn1</module>
        <module>asterisk</module>
        <module>aws-secrets-manager</module>
        <module>aws-xray</module>
        <module>azure-cosmosdb</module>
        <module>azure-key-vault</module>
        <module>azure-servicebus</module>
        <module>azure-storage-datalake</module>
        <module>barcode</module>
        <module>beanio</module>
        <module>bonita</module>
        <module>chatscript</module>
        <module>chunk</module>
        <module>cli-connector</module>
        <module>cm-sms</module>
        <module>coap</module>
        <module>cometd</module>
        <module>console</module>
        <module>couchbase</module>
        <module>djl</module>
        <module>dns</module>
        <module>drill</module>
        <module>dsl-modeline</module>
        <module>ehcache</module>
        <module>elasticsearch</module>
        <module>elasticsearch-rest-client</module>
        <module>etcd3</module>
        <module>fastjson</module>
        <module>flink</module>
        <module>google-functions</module>
        <module>google-secret-manager</module>
        <module>guava-eventbus</module>
        <module>hashicorp-vault</module>
        <module>huaweicloud-smn</module>
        <module>iec60870</module>
        <module>ignite</module>
        <module>irc</module>
        <module>jcr</module>
        <module>jgroups</module>
        <module>jgroups-raft</module>
        <module>jooq</module>
        <module>json-patch</module>
        <module>jsonapi</module>
        <module>ldif</module>
        <module>lucene</module>
        <module>mail-microsoft-oauth</module>
        <module>mvel</module>
        <module>opensearch</module>
        <module>printer</module>
        <module>pulsar</module>
        <module>quickfix</module>
        <module>redis</module>
        <module>robotframework</module>
        <module>schematron</module>
        <module>smpp</module>
        <module>snmp</module>
        <module>spring-redis</module>
        <module>stitch</module>
        <module>stomp</module>
        <module>stub</module>
        <module>thrift</module>
        <module>web3j</module>
        <module>wordpress</module>
        <module>workday</module>
        <module>xmpp</module>
        <module>zookeeper</module>
        <module>zookeeper-master</module>
    </modules>

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

</project>
