<?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-parent</artifactId>
        <version>1.0.0-M5</version>
    </parent>

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

    <name>Camel Quarkus :: Extensions</name>

    <modules>
        <!-- extensions a..z; do not remove this comment, it is important when sorting via  mvn process-resources -Pformat -->
        <module>activemq</module>
        <module>ahc</module>
        <module>ahc-ws</module>
        <module>attachments</module>
        <module>aws-ec2</module>
        <module>aws-ecs</module>
        <module>aws-eks</module>
        <module>aws-iam</module>
        <module>aws-kinesis</module>
        <module>aws-kms</module>
        <module>aws-lambda</module>
        <module>aws-s3</module>
        <module>aws-sns</module>
        <module>aws-sqs</module>
        <module>aws-translate</module>
        <module>azure</module>
        <module>base64</module>
        <module>bean</module>
        <module>bean-validator</module>
        <module>bindy</module>
        <module>box</module>
        <module>braintree</module>
        <module>consul</module>
        <module>controlbus</module>
        <module>csv</module>
        <module>dataformat</module>
        <module>direct</module>
        <module>dozer</module>
        <module>endpointdsl</module>
        <module>exec</module>
        <module>fhir</module>
        <module>file</module>
        <module>file-watch</module>
        <module>ftp</module>
        <module>graphql</module>
        <module>gson</module>
        <module>http</module>
        <module>hystrix</module>
        <module>ical</module>
        <module>infinispan</module>
        <module>jackson</module>
        <module>jacksonxml</module>
        <module>jaxb</module>
        <module>jdbc</module>
        <module>jira</module>
        <module>jms</module>
        <module>johnzon</module>
        <module>jsonpath</module>
        <module>kafka</module>
        <module>kotlin</module>
        <module>log</module>
        <module>lzf</module>
        <module>mail</module>
        <module>microprofile-health</module>
        <module>microprofile-metrics</module>
        <module>mongodb</module>
        <module>mustache</module>
        <module>netty</module>
        <module>netty-http</module>
        <module>olingo4</module>
        <module>opentracing</module>
        <module>paho</module>
        <module>pdf</module>
        <module>platform-http</module>
        <module>reactive-streams</module>
        <module>ref</module>
        <module>rest</module>
        <module>salesforce</module>
        <module>scheduler</module>
        <module>seda</module>
        <module>servlet</module>
        <module>sjms</module>
        <module>sjms2</module>
        <module>slack</module>
        <module>snakeyaml</module>
        <module>sql</module>
        <module>stream</module>
        <module>tagsoup</module>
        <module>tarfile</module>
        <module>telegram</module>
        <module>timer</module>
        <module>twitter</module>
        <module>validator</module>
        <module>vm</module>
        <module>websocket-jsr356</module>
        <module>xpath</module>
        <module>xslt</module>
        <module>xstream</module>
        <module>zip-deflater</module>
        <module>zipfile</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <inherited>false</inherited>
                <!-- Settings for stubbing new extensions. E.g. to add a new extension to support an imaginary
                     Camel Foo ABC component, you would run

                       mvn quarkus:create-extension -N -Dquarkus.artifactIdBase=foo-abc -Dquarkus.nameBase="Foo ABC" -Dquarkus.additionalRuntimeDependencies="org.apache.camel:camel-@{quarkus.artifactIdBase}:@{$}{camel.version}"

                     -Dquarkus.nameBase is optional. If you do not specify it, the plugin will derive it from
                     artifactIdBase by replacing dashes with spaces and capitalizing the first letter of each token.
                -->
                <configuration>
                    <artifactIdPrefix>camel-quarkus-</artifactIdPrefix>
                    <namePrefix xml:space="preserve">Camel Quarkus :: </namePrefix>
                    <nameSegmentDelimiter xml:space="preserve"> :: </nameSegmentDelimiter>
                    <javaPackageInfix>component</javaPackageInfix>
                    <templatesUriBase>file:///${project.basedir}/../tooling/create-extension-templates</templatesUriBase>
                    <runtimeBomPath>../poms/bom/pom.xml</runtimeBomPath>
                    <deploymentBomPath>../poms/bom-deployment/pom.xml</deploymentBomPath>
                    <bomEntryVersion>@{camel-quarkus.version}</bomEntryVersion>
                    <itestParentPath>../integration-tests/pom.xml</itestParentPath>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
