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

<!-- $Rev$ $Date$ -->

<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.geronimo.genesis</groupId>
        <artifactId>genesis-java5-flava</artifactId>
        <version>2.2</version>
    </parent>

    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-availability_1.0_spec</artifactId>
    <packaging>bundle</packaging>
    <name>Apache Geronimo Availability Management for Java 1.0</name>
    <version>1.0-SNAPSHOT</version>

    <description>JSR 319: Availability Management for Java</description>

    <url>http://geronimo.apache.org/maven/${siteId}/${version}</url>
    <distributionManagement>
        <site>
            <id>apache-website</id>
            <url>${site.deploy.url}/maven/${siteId}/${version}</url>
        </site>
    </distributionManagement>

    <properties>
        <siteId>specs/${artifactId}</siteId>
    </properties>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-availability_1.0_spec/</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-availability_1.0_spec/</developerConnection>
        <url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/trunk/geronimo-availability_1.0_spec/</url>
    </scm>

    <build>
      <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>3.5.0</version>
            <configuration>
                <instructions>
                  <Export-Package>javax.availability.management*;version=1.0</Export-Package>
                    <Provide-Capability><![CDATA[
                        osgi.contract;osgi.contract=JavaAvailabilityManagement;uses:="${packages;NAMED;javax.*}";version:List<Version>='1.0,0.4'
                    ]]></Provide-Capability>
                </instructions>
            </configuration>
        </plugin>
      </plugins>
    </build>

</project>
