<?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.whirr</groupId>
    <artifactId>karaf</artifactId>
    <version>0.9.0</version>
    <relativePath>../pom.xml</relativePath>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.whirr.karaf</groupId>
  <artifactId>apache-whirr</artifactId>
  <packaging>pom</packaging>
  <name>Apache Whirr Karaf Feature</name>

  <properties>
    <activation.spec.version>1.1</activation.spec.version>
    <ant.bundle.version>1.7.0_5</ant.bundle.version>
    <aopalliance.bundle.version>1.0_5</aopalliance.bundle.version>
    <!-- Downgrading commons-conifiguration version to 1.6, since 1.7 imports the world -->
    <commons.configuration.version>1.6</commons.configuration.version>
    <commons.beanutils.version>1.8.3</commons.beanutils.version>
    <commons.collections.version>3.2.1</commons.collections.version>
    <commons.digester.version>2.1</commons.digester.version>
    <commons.jexl.bundle.version>1.1_5</commons.jexl.bundle.version>
    <commons.jxpath.bundle.version>1.2_5</commons.jxpath.bundle.version>
    <commons.lang.version>2.6</commons.lang.version>
    <commons.vfs2.version>2.0</commons.vfs2.version>
    <dnsjava.version>2.0.8</dnsjava.version>
    <javax.mail.bundle.version>1.4.1_4</javax.mail.bundle.version>
    <junit.bundle.version>4.9_1</junit.bundle.version>
    <jclouds.karaf.version>${jclouds.version}</jclouds.karaf.version>
    <jopt.simple.bundle.version>4.3_1</jopt.simple.bundle.version>
    <jsch.bundle.version>0.1.44_2</jsch.bundle.version>
    <not-yet-commons-ssl.bundle.version>0.3.11_1
    </not-yet-commons-ssl.bundle.version>
    <servlet.spec.version>1.2</servlet.spec.version>
    <tukaani.xz.version>1.0</tukaani.xz.version>
  </properties>
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/*</include>
        </includes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <useDefaultDelimiters>false</useDefaultDelimiters>
          <delimiters>
            <delimiter>${*}</delimiter>
          </delimiters>
        </configuration>
        <executions>
          <execution>
            <id>filter</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>resources</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>attach-artifact</id>
            <phase>package</phase>
            <goals>
              <goal>attach-artifact</goal>
            </goals>
            <configuration>
              <artifacts>
                <artifact>
                  <file>target/classes/features.xml</file>
                  <type>xml</type>
                  <classifier>features</classifier>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.karaf.tooling</groupId>
        <artifactId>features-maven-plugin</artifactId>
        <version>${karaf.version}</version>
        <executions>
          <execution>
            <id>add-features-to-repo</id>
            <phase>generate-resources</phase>
            <goals>
              <!-- We are doing so to just to validate that all artifacts are reachable -->
              <goal>add-features-to-repo</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>file:${basedir}/target/classes/features.xml
                </descriptor>
              </descriptors>
              <features>
                <feature>whirr</feature>
                <feature>whirr-cassandra</feature>
                <feature>whirr-chef</feature>
                <feature>whirr-cassandra</feature>
                <feature>whirr-chef</feature>
                <feature>whirr-elasticsearch</feature>
                <feature>whirr-ganglia</feature>
                <feature>whirr-hadoop</feature>
                <feature>whirr-hama</feature>
                <feature>whirr-hbase</feature>
                <feature>whirr-puppet</feature>
                <feature>whirr-mahout</feature>
                <feature>whirr-pig</feature>
                <feature>whirr-zookeeper</feature>
              </features>
              <repository>target/features-repo</repository>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>











