<?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-examples</artifactId>
        <version>1.9.1-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>camel-k-runtime-example-xml</artifactId>

    <properties>
        <noDeps>true</noDeps>
        <quarkus.camel.main.routes-discovery.enabled>false</quarkus.camel.main.routes-discovery.enabled>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel.k</groupId>
            <artifactId>camel-k-runtime</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel.quarkus</groupId>
            <artifactId>camel-quarkus-xml-io-dsl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel.quarkus</groupId>
            <artifactId>camel-quarkus-log</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel.quarkus</groupId>
            <artifactId>camel-quarkus-timer</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-bootstrap-maven-plugin</artifactId>
                <version>${quarkus-version}</version>
            </plugin>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <version>${quarkus-version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                            <goal>generate-code</goal>
                            <goal>generate-code-tests</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <finalName>${project.artifactId}</finalName>
                    <environmentVariables>
                        <CAMEL_K_CONF>${project.basedir}/data/application.properties</CAMEL_K_CONF>
                        <CAMEL_K_ROUTES>file:${project.basedir}/data/routes.xml</CAMEL_K_ROUTES>
                    </environmentVariables>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>${exec-maven-plugin-version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>java</executable>
                    <workingDirectory>${project.basedir}</workingDirectory>
                    <arguments>
                        <argument>-jar</argument>
                        <argument>${project.build.directory}/quarkus-app/quarkus-run.jar</argument>
                    </arguments>
                    <environmentVariables>
                        <CAMEL_K_CONF>${project.basedir}/data/application.properties</CAMEL_K_CONF>
                        <CAMEL_K_ROUTES>file:${project.basedir}/data/routes.xml</CAMEL_K_ROUTES>
                    </environmentVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>native</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>native</name>
                </property>
            </activation>
            <properties>
                <quarkus.package.output-name>${project.artifactId}</quarkus.package.output-name>
                <quarkus.package.type>native</quarkus.package.type>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>${exec-maven-plugin-version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <executable>${project.build.directory}/${project.artifactId}-runner</executable>
                            <arguments combine.self="override" />
                            <workingDirectory>${project.basedir}</workingDirectory>
                            <environmentVariables>
                                <CAMEL_K_CONF>${project.basedir}/data/application.properties</CAMEL_K_CONF>
                                <CAMEL_K_ROUTES>file:${project.basedir}/data/routes.xml</CAMEL_K_ROUTES>
                            </environmentVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>
