<?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-jpa_2.0_spec</artifactId>
    <packaging>bundle</packaging>
    <name>Apache Geronimo JPA Spec 2.0</name>
    <version>1.2-SNAPSHOT</version>

    <description>Implementation of Sun JSR-317 JPA 2.0 Spec 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/trunk/geronimo-jpa_2.0_spec/</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/geronimo/specs/trunk/geronimo-jpa_2.0_spec/</developerConnection>
        <url>http://svn.apache.org/viewcvs.cgi/geronimo/specs/trunk/geronimo-jpa_2.0_spec/</url>
    </scm>

    <dependencies>
<!--
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.2.0</version>
            <scope>compile</scope>
            <optional>true</optional>
        </dependency>
-->
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>1.4.0</version>
            <scope>compile</scope>
            <optional>true</optional>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.osgi.foundation</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>1.2.0</version>
            <scope>compile</scope>
            <optional>true</optional>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.osgi.core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.osgi.foundation</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>javax.servlet</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-osgi-locator</artifactId>
            <version>1.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <configuration>
                        <addVersionToProjectName>true</addVersionToProjectName>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>3.5.0</version>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>${groupId}.${artifactId};singleton=true</Bundle-SymbolicName>
                        <Bundle-Activator>org.apache.geronimo.specs.jpa.PersistenceActivator</Bundle-Activator>
                        <Specification-Title>JSR-317 Java Persistence API 2.0</Specification-Title>
                        <Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
                        <Specification-Version>2.0</Specification-Version>
                        <Private-Package>org.apache.geronimo.specs.jpa.*;org.apache.geronimo.osgi.locator</Private-Package>
                        <!-- The OSGi specification requires these packages be exported as 1.1.  Unfortunately,
                             there are bundles out there that are currently expecting to use a 2.0 version.  The duplicate
                             package exports are done to prevent breaking those packages -->
                        <Export-Package>
                            javax.persistence;version=1.1;jpa=2.0,
                            javax.persistence.criteria;version=1.1;jpa=2.0,
                            javax.persistence.metamodel;version=1.1;jpa=2.0,
                            javax.persistence.spi;version=1.1;jpa=2.0,
                            javax.persistence;version=2.0;jpa=2.0,
                            javax.persistence.criteria;version=2.0,
                            javax.persistence.metamodel;version=2.0,
                            javax.persistence.spi;version=2.0
                        </Export-Package>
                        <!-- bnd is not correctly handling these imports using wildcards, so they
                             need to be explicitly specified -->
                        <Import-Package>
                            javax.persistence;version=1.1,
                            javax.persistence.criteria;version=1.1,
                            javax.persistence.metamodel;version=1.1,
                            javax.persistence.spi;version=1.1,
                            javax.sql;resolution:=optional,
                            org.osgi.framework;resolution:=optional,
                            org.osgi.util.tracker;resolution:=optional,
                            org.apache.geronimo.osgi.registry.api;resolution:=optional
                        </Import-Package>
                        <Provide-Capability><![CDATA[
                           osgi.contract;osgi.contract=JavaJPA;uses:="${packages;NAMED;javax.*}";version:List<Version>='2.0,1.0'
                        ]]></Provide-Capability>
                    </instructions>
                    <unpackBundle>true</unpackBundle>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
