<?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">
    <parent>
        <groupId>org.apache.camel.k</groupId>
        <artifactId>camel-k-runtime-project</artifactId>
        <version>1.15.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>

    <artifactId>camel-k-itests</artifactId>

    <modules>
        <module>camel-k-itests-core</module>

        <module>camel-k-itests-loader-groovy</module>
        <module>camel-k-itests-loader-kotlin</module>
        <module>camel-k-itests-loader-java</module>
        <module>camel-k-itests-loader-jsh</module>
        <module>camel-k-itests-loader-js</module>
        <module>camel-k-itests-loader-xml</module>
        <module>camel-k-itests-loader-yaml</module>
        <module>camel-k-itests-loader-polyglot</module>

        <module>camel-k-itests-runtime</module>
        <module>camel-k-itests-runtime-xml</module>
        <module>camel-k-itests-runtime-yaml</module>

        <module>camel-k-itests-cron</module>
        <module>camel-k-itests-master</module>
        <module>camel-k-itests-knative</module>
        <module>camel-k-itests-knative-env-from-registry</module>
        <module>camel-k-itests-knative-env-from-properties</module>
        <module>camel-k-itests-knative-producer</module>
        <module>camel-k-itests-knative-consumer</module>
        <module>camel-k-itests-knative-sinkbinding</module>
        <module>camel-k-itests-knative-source-groovy</module>
        <module>camel-k-itests-knative-source-java</module>
        <module>camel-k-itests-knative-source-js</module>
        <module>camel-k-itests-knative-source-xml</module>
        <module>camel-k-itests-knative-source-yaml</module>
        <module>camel-k-itests-kamelet</module>
        <module>camel-k-itests-webhook</module>
    </modules>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>reserve-network-port</id>
                            <goals>
                                <goal>reserve-network-port</goal>
                            </goals>
                            <phase>process-resources</phase>
                            <configuration>
                                <portNames>
                                    <portName>test.http.port.jvm</portName>
                                    <portName>test.http.port.native</portName>
                                </portNames>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>io.quarkus</groupId>
                    <artifactId>quarkus-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <configuration>
                        <systemProperties>
                            <quarkus.http.test-port>${test.http.port.jvm}</quarkus.http.test-port>
                            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
                        </systemProperties>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
