<?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.0</version>
    <relativePath>../redback-components-parent/pom.xml</relativePath>
  </parent>

  <groupId>org.apache.archiva.redback</groupId>
  <artifactId>redback-components</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>file://${user.home}/redback-components-site-deploy/${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.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>
    </plugins>
  </build>

</project>