<?xml version="1.0" encoding="UTF-8"?>
<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">

<!--

    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.
-->

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.servicemix.examples</groupId>
        <artifactId>examples</artifactId>
        <version>4.1.0-SNAPSHOT</version>
    </parent>

    <groupId>org.apache.servicemix.examples</groupId>
    <artifactId>bridge-camel</artifactId>
    <name>ServiceMix :: Examples :: Bridge :: Camel</name>
    <packaging>pom</packaging>
    
    <modules>
      <module>bridge-jms-su</module>
      <module>bridge-http-su</module>
      <module>bridge-camel-su</module>
      <module>bridge-camel-sa</module>
      <module>client</module>
    </modules>

    <!-- Add ServiceMix repositories for snaphots and releases -->
        <pluginRepositories>
      <pluginRepository>
        <id>apache.snapshots</id>
        <name>Apache Snapshots Repository</name>
        <url>http://people.apache.org/repo/m2-snapshot-repository</url>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
        <releases>
           <enabled>false</enabled>
        </releases>
      </pluginRepository>
      <pluginRepository>
        <id>apache.incubating</id>
        <name>Apache Incubating Repository</name>
        <url>http://people.apache.org/repo/m2-incubating-repository</url>
        <snapshots>
          <enabled>false</enabled>
        </snapshots>
        <releases>
           <enabled>true</enabled>
        </releases>
      </pluginRepository>
    </pluginRepositories>
    <repositories>
      <repository>
        <id>apache.snapshots</id>
        <name>Apache Snapshots Repository</name>
        <url>http://people.apache.org/repo/m2-snapshot-repository</url>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
        <releases>
           <enabled>false</enabled>
        </releases>
      </repository>
      <repository>
        <id>apache.incubating</id>
        <name>Apache Incubating Repository</name>
        <url>http://people.apache.org/repo/m2-incubating-repository</url>
        <snapshots>
          <enabled>false</enabled>
        </snapshots>
        <releases>
           <enabled>true</enabled>
        </releases>
      </repository>
    </repositories>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>${maven.assembly.version}</version>
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <id>src</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/main/assembly/src.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.servicemix.tooling</groupId>
                <artifactId>jbi-maven-plugin</artifactId>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>
</project>

