<?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.archiva.redback.components</groupId>
    <artifactId>redback-components</artifactId>
    <version>2.5-SNAPSHOT</version>
    <relativePath>../redback-components-parent/pom.xml</relativePath>
  </parent>

  <version>2.0-SNAPSHOT</version>
  <artifactId>redback-features</artifactId>
  <packaging>pom</packaging>
  <name>Redback :: Components :: Karaf features</name>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/archiva/redback/redback-components/trunk/redback-features</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/archiva/redback/redback-components/trunk/redback-features</developerConnection>
    <url>http://svn.apache.org/viewvc/archiva/redback/redback-components/trunk/redback-features</url>
  </scm>

  <url>http://archiva.apache.org/redback/components/${project.artifactId}</url>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>scm:svn:https://svn.apache.org/repos/asf/archiva/site-content/redback/components/${project.artifactId}</url>
    </site>
  </distributionManagement>

  <properties>
    <commons-beanutils.bundle.version>1.7.0_5</commons-beanutils.bundle.version>
    <commons-codec.bundle.version>1.3_5</commons-codec.bundle.version>
    <commons-collections.bundle.version>3.2.1_3</commons-collections.bundle.version>
    <commons-digester.bundle.version>1.8_4</commons-digester.bundle.version>
    <commons-httpclient.bundle.version>3.1_7</commons-httpclient.bundle.version>
    <commons-jexl.version>2.1.1</commons-jexl.version>
    <commons-jxpath.version>1.3</commons-jxpath.version>
    <commons-net.bundle.version>1.4.1_6</commons-net.bundle.version>
    <commons-vfs2.version>2.0</commons-vfs2.version>
    <ehcache.bundle.version>2.5.3_1-SNAPSHOT</ehcache.bundle.version>
    <javax-inject.bundle.version>1_1</javax-inject.bundle.version>
    <jdo2-api.bundle.version>2.0_1-SNAPSHOT</jdo2-api.bundle.version>
    <jdom.bundle.version>1.1_4</jdom.bundle.version>
    <jsch.bundle.version>0.1.48_1</jsch.bundle.version>
    <quartz.bundle.version>2.1.5_1</quartz.bundle.version>
    <oscache.bundle.version>2.4_5</oscache.bundle.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>
        <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.8</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>
    </plugins>
  </build>

</project>
