<?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/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.apache.camel.springboot</groupId>
		<artifactId>spring-boot</artifactId>
		<version>3.12.0-SNAPSHOT</version>
	</parent>

	<groupId>org.apache.camel.springboot.example</groupId>
	<artifactId>examples</artifactId>
	<name>Camel SB :: Examples</name>
	<description>Camel Examples</description>
	<packaging>pom</packaging>

	<modules>
		<module>spring-boot</module>
		<module>activemq</module>
		<module>actuator-http-metrics</module>
		<module>amqp</module>
		<module>apm-opentracing</module>
		<module>arangodb</module>
		<module>aws2-s3</module>
		<module>clustered-route-controller</module>
		<module>fhir</module>
		<module>fhir-auth-tx</module>
		<module>geocoder</module>
		<module>grpc</module>
		<module>grpc-kubernetes</module>
		<module>health-checks</module>
		<module>hystrix</module>
		<module>infinispan</module>
		<module>jira</module>
		<module>kafka-avro</module>
		<module>kafka-offsetrepository</module>
		<module>kamelet-chucknorris</module>
		<module>load-balancer-eip</module>
		<module>master</module>
		<module>metrics</module>
		<module>opentracing</module>
		<module>paho-mqtt5-shared-subscriptions</module>
		<module>pojo</module>
		<module>rabbitmq</module>
		<module>reactive-streams</module>
		<module>resilience4j</module>
		<module>rest-jpa</module>
		<module>rest-producer</module>
		<module>rest-swagger</module>
		<module>rest-swagger-simple</module>
		<module>rest-openapi</module>
		<module>rest-openapi-simple</module>
		<module>routetemplate</module>
		<module>routes-configuration</module>
		<module>servicecall</module>
		<module>supervising-route-controller</module>
		<module>twitter-salesforce</module>
		<module>type-converter</module>
		<module>undertow-spring-security</module>
		<module>validator</module>
		<module>webhook</module>
		<module>xml</module>
		<module>xml-import</module>
		<module>zipkin</module>
		<module>strimzi</module>
		<module>splitter-eip</module>
		<module>widget-gadget</module>
		<module>unit-testing</module>
    </modules>

	<properties>
		<camel-version>3.12.0-SNAPSHOT</camel-version>
		<skip.starting.camel.context>false</skip.starting.camel.context>
		<javax.servlet.api.version>4.0.1</javax.servlet.api.version>
		<fabric8-maven-plugin-version>4.4.1</fabric8-maven-plugin-version>
		<kafka-avro-serializer-version>5.2.2</kafka-avro-serializer-version>
		<reactor-version>3.2.16.RELEASE</reactor-version>
	</properties>

	<repositories>
		<repository>
			<id>apache.snapshots</id>
			<url>https://repository.apache.org/snapshots/</url>
			<name>Apache Snapshot Repo</name>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>apache.snapshots</id>
			<url>https://repository.apache.org/snapshots/</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
			<releases>
				<enabled>false</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>

	<dependencyManagement>
		<dependencies>
			<!--
			  CAMEL-13084 Fix the spring-boot examples start up error by overriding servlet API version from camel-parent
			  We need to clean it up once camel-parent upgrade the servlet api version.
			-->
			<dependency>
				<groupId>javax.servlet</groupId>
				<artifactId>javax.servlet-api</artifactId>
				<version>${javax.servlet.api.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>

			<!-- update readme file -->
			<plugin>
				<groupId>org.apache.camel</groupId>
				<artifactId>camel-package-maven-plugin</artifactId>
				<version>${camel-version}</version>
				<configuration>
					<startingFolder></startingFolder>
					<filter>spring-boot</filter>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>prepare-example</goal>
						</goals>
						<phase>process-resources</phase>
					</execution>
				</executions>
			</plugin>

			<!-- to validate Camel endpoints: mvn camel-report:validate -->
			<plugin>
				<groupId>org.apache.camel</groupId>
				<artifactId>camel-report-maven-plugin</artifactId>
				<version>${camel-version}</version>
				<configuration>
					<failOnError>false</failOnError>
					<includeTest>true</includeTest>
					<includeXml>true</includeXml>
					<ignoreLenientProperties>false</ignoreLenientProperties>
				</configuration>
			</plugin>

			<plugin>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<forkCount>1</forkCount>
					<reuseForks>false</reuseForks>
					<systemPropertyVariables>
						<skipStartingCamelContext>${skip.starting.camel.context}</skipStartingCamelContext>
					</systemPropertyVariables>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<profiles>
		<profile>
			<id>container-test</id>
			<properties>
				<skip.starting.camel.context>true</skip.starting.camel.context>
			</properties>
		</profile>
		<!--
		  This profile allows you to add a repository to the repo list so that
		  you can test the examples out against a staged version of the camel distribution
		-->
		<profile>
			<id>add-remote-repo</id>
			<activation>
				<property>
					<name>remoteRepo</name>
				</property>
			</activation>

			<repositories>
				<repository>
					<id>dynamic.repo</id>
					<name>Repository Dynamically Added Via the Command Line</name>
					<url>$remoteRepo</url>
				</repository>
			</repositories>
			<pluginRepositories>
				<pluginRepository>
					<id>dynamic.repo</id>
					<name>Repository Dynamically Added Via the Command Line</name>
					<url>$remoteRepo</url>
				</pluginRepository>
			</pluginRepositories>

		</profile>
	</profiles>

</project>
