<?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-java6-flava</artifactId>
        <version>2.2</version>
    </parent>

    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-annotation_1.3_spec</artifactId>
    <packaging>bundle</packaging>
    <name>Apache Geronimo Annotation Spec 1.3</name>
    <version>1.0</version>
    <description>Common Annotations spec 1.3 API</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/tags/geronimo-annotation_1.3_spec-1.0</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/tags/geronimo-annotation_1.3_spec-1.0</developerConnection>
        <url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/tags/geronimo-annotation_1.3_spec-1.0</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.0.1</version>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${groupId}.${artifactId};singleton=true</Bundle-SymbolicName>
                        <Specification-Title>JSR-250 Common Annotations 1.3</Specification-Title>
                        <Specification-Vendor>Oracle, Inc.</Specification-Vendor>
                        <Specification-Version>1.3</Specification-Version>
                        <Export-Package>javax.annotation*;version=1.3</Export-Package>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
