<?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</groupId>
    <artifactId>camel-parent</artifactId>
    <version>2.8.1</version>
    <relativePath>../parent</relativePath>
  </parent>

  <artifactId>camel-core</artifactId>
  <packaging>bundle</packaging>
  <name>Camel :: Core</name>
  <description>The Core Camel Java DSL based router</description>

  <properties>
    <camel.osgi.export.pkg>
        org.apache.camel.*
    </camel.osgi.export.pkg>
    <camel.osgi.import>
        !org.apache.camel.*,
        !com.googlecode.concurrentlinkedhashmap,
        org.apache.xalan.xsltc.trax;resolution:=optional,
        javax.activation;resolution:=optional,
        javax.xml.bind;resolution:=optional,
        javax.xml.bind.annotation;resolution:=optional,
        javax.xml.bind.annotation.adapters;resolution:=optional,
        javax.xml.stream;resolution:=optional,
        org.springframework.jmx.export.annotation;resolution:=optional;version="[3,4)",
        org.springframework.jmx.export.assembler;resolution:=optional;version="[3,4)",
        org.springframework.jmx.export.metadata;resolution:=optional;version="[3,4)",
        *
    </camel.osgi.import>
    <camel.osgi.dynamic>
        org.apache.camel.spring.util;${camel.osgi.import.strict.version},org.apache.camel.processor.interceptor.jpa;${camel.osgi.import.strict.version}
    </camel.osgi.dynamic>
    <camel.osgi.activator>
        org.apache.camel.impl.osgi.Activator
    </camel.osgi.activator>
  </properties>

  <dependencies>

    <!-- required dependencies by camel-core -->
    <dependency>
      <groupId>com.googlecode.concurrentlinkedhashmap</groupId>
      <artifactId>concurrentlinkedhashmap-lru</artifactId>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>

    <!-- required dependencies by camel-core -->
    <dependency>
      <groupId>org.fusesource.commonman</groupId>
      <artifactId>commons-management</artifactId>
    </dependency>

    <!-- to allow Spring annotations to be used for management -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <optional>true</optional>
      <scope>compile</scope>
      <exclusions>
        <!-- we only need spring-context.jar as optional as we need the JMX export annotations -->
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
        </exclusion>
        <exclusion>
          <groupId>aopalliance</groupId>
          <artifactId>aopalliance</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <!-- osgi support -->
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>4.1.0</version>
        <scope>provided</scope>
        <optional>true</optional>
    </dependency>

    <!-- testing -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit-version}</version>
      <scope>test</scope>
    </dependency>

    <!-- logging -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <scope>test</scope>
    </dependency>

    <!-- needed for jmx testing -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <scope>test</scope>
    </dependency>

  </dependencies>


  <build>
    <plugins>
    <!-- Shade the googlecode stuff for OSGi -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <artifactSet>
                <includes>
                  <include>com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru</include>
                </includes>
              </artifactSet>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <!-- generate the attached tests jar -->
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.2</version>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <excludes>
            <exclude>log4j.properties</exclude>
          </excludes>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <forkMode>once</forkMode>
          <excludes>
            <!-- TODO FIXME ASAP -->
            <exclude>**/XXXTest.*</exclude>            
            <exclude>**/LRUSoftCacheTest.*</exclude>  <!-- CAMEL-4069 -->          
          </excludes>
        </configuration>
      </plugin>

    </plugins>
  </build>


  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          <links>
            <link>http://download.oracle.com/javase/6/docs/api/</link>
            <link>http://download.oracle.com/javaee/6/api/</link>
            <link>http://static.springsource.org/spring/docs/3.0.5.RELEASE/api/</link>
          </links>
          <stylesheetfile>${basedir}/../etc/css/stylesheet.css</stylesheetfile>
          <linksource>true</linksource>
          <maxmemory>256m</maxmemory>
          <source>1.6</source>

          <groups>
            <group>
              <title>Camel API</title>
              <packages>org.apache.camel</packages>
            </group>
            <group>
              <title>Fluent API (DSL) for building EIP rules</title>
              <packages>org.apache.camel.builder:org.apache.camel.builder.*</packages>
            </group>
            <group>
              <title>The bean and JAXB2 model for EIP rule definitions</title>
              <packages>org.apache.camel.model:org.apache.camel.model.*</packages>
            </group>
            <group>
              <title>Strategy APIs for implementors extending Camel</title>
              <packages>org.apache.camel.spi</packages>
            </group>
            <group>
              <title>Language APIs and plugins for Expressions and Predicates</title>
              <packages>org.apache.camel.language:org.apache.camel.language.*</packages>
            </group>
            <group>
              <title>Processors to implement the Enterprise Integration Patterns</title>
              <packages>org.apache.camel.processor:org.apache.camel.processor.*</packages>
            </group>
            <group>
              <title>Camel Components</title>
              <packages>org.apache.camel.component.*</packages>
            </group>
            <group>
              <title>Camel Runtime</title>
              <packages>org.apache.camel.impl:org.apache.camel.impl.*</packages>
            </group>
            <group>
              <title>Type conversion helper classes</title>
              <packages>org.apache.camel.converter:org.apache.camel.converter.*</packages>
            </group>
            <group>
              <title>Utility classes</title>
              <packages>org.apache.camel.util:org.apache.camel.util.*:org.apache.camel.view</packages>
            </group>
          </groups>
        </configuration>
      </plugin>
    </plugins>
  </reporting>


  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>package</id>
                <phase>package</phase>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <links>
                <link>http://download.oracle.com/javase/6/docs/api/</link>
                <link>http://download.oracle.com/javaee/6/api/</link>
                <link>http://static.springsource.org/spring/docs/3.0.5.RELEASE/api/</link>
              </links>
              <stylesheetfile>${basedir}/../etc/css/stylesheet.css</stylesheetfile>
              <linksource>true</linksource>
              <maxmemory>256m</maxmemory>
              <source>1.6</source>

              <groups>
                <group>
                  <title>Camel API</title>
                  <packages>org.apache.camel</packages>
                </group>
                <group>
                  <title>Fluent API (DSL) for building EIP rules</title>
                  <packages>org.apache.camel.builder:org.apache.camel.builder.*</packages>
                </group>
                <group>
                  <title>The bean and JAXB2 model for EIP rule definitions</title>
                  <packages>org.apache.camel.model:org.apache.camel.model.*</packages>
                </group>
                <group>
                  <title>Strategy APIs for implementors extending Camel</title>
                  <packages>org.apache.camel.spi</packages>
                </group>
                <group>
                  <title>Language APIs and plugins for Expressions and Predicates</title>
                  <packages>org.apache.camel.language:org.apache.camel.language.*</packages>
                </group>
                <group>
                  <title>Processors to implement the Enterprise Integration Patterns</title>
                  <packages>org.apache.camel.processor:org.apache.camel.processor.*</packages>
                </group>
                <group>
                  <title>Camel Components</title>
                  <packages>org.apache.camel.component.*</packages>
                </group>
                <group>
                  <title>Camel Runtime</title>
                  <packages>org.apache.camel.impl:org.apache.camel.impl.*</packages>
                </group>
                <group>
                  <title>Type conversion helper classes</title>
                  <packages>org.apache.camel.converter:org.apache.camel.converter.*</packages>
                </group>
                <group>
                  <title>Utility classes</title>
                  <packages>org.apache.camel.util:org.apache.camel.util.*:org.apache.camel.view</packages>
                </group>
              </groups>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
