<?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.3.0</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>core</module>
        <module>core-cloud</module>
        <module>core-xml</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>fhir</module>
        <module>infinispan</module>
        <module>jackson</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>slack</module>
        <module>tarfile</module>
        <module>timer</module>
        <module>twitter</module>
        <module>vm</module>
        <module>zipfile</module>
        <module>attachments</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>
