<?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>0.2.1-SNAPSHOT</version>
    </parent>

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

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

    <modules>
        <!-- support extensions -->
        <module>support</module>

        <!-- common/shared extensions -->
        <module>xml-common</module>
        <module>core</module>
        <module>core-cloud</module>
        <module>http-common</module>
        <module>reactive-executor</module>

        <!-- extensions a..z -->
        <module>aws-eks</module>
        <module>aws-s3</module>
        <module>aws-sns</module>
        <module>aws-sqs</module>
        <module>bean</module>
        <module>csv</module>
        <module>direct</module>
        <module>infinispan</module>
        <module>jdbc</module>
        <module>log</module>
        <module>mail</module>
        <module>microprofile-health</module>
        <module>microprofile-metrics</module>
        <module>netty-http</module>
        <module>opentracing</module>
        <module>paho</module>
        <module>platform-http</module>
        <module>rest</module>
        <module>salesforce</module>
        <module>servlet</module>
        <module>tarfile</module>
        <module>timer</module>
        <module>twitter</module>
        <module>zipfile</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>validate-extension-metadata</id>
                        <inherited>false</inherited>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <phase>verify</phase>
                        <configuration>
                            <source>file:///${project.basedir}/../build/scripts/validate-extension-metadata.groovy</source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <inherited>false</inherited>
                <!-- Setting for stubbing new extensions via
                       mvn quarkus:create-extension -N -Dquarkus.artifactIdBase=my-new-extension
                -->
                <configuration>
                    <artifactIdPrefix>camel-quarkus-</artifactIdPrefix>
                    <namePrefix xml:space="preserve">Camel Quarkus :: </namePrefix>
                    <nameSegmentDelimiter xml:space="preserve"> :: </nameSegmentDelimiter>
                    <javaPackageInfix>component</javaPackageInfix>
                    <templatesUriBase>file:///${project.basedir}/../build/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>
