<?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>
    <relativePath />
  </parent>

  <groupId>org.apache.geronimo.specs</groupId>
  <artifactId>geronimo-jpa_2.1_spec</artifactId>
  <packaging>bundle</packaging>
  <name>Apache Geronimo JPA Spec 2.1</name>
  <version>1.0-SNAPSHOT</version>

  <description>Implementation of JSR-338 JPA 2.1 Spec API</description>

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

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

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

  <dependencies>
    <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>${project.groupId}.${project.artifactId};singleton=true</Bundle-SymbolicName>
            <Bundle-Activator>org.apache.geronimo.specs.jpa.PersistenceActivator</Bundle-Activator>
            <Specification-Title>JSR-338 Java Persistence API 2.1</Specification-Title>
            <Specification-Vendor>Sun Microsystems, Inc.</Specification-Vendor>
            <Specification-Version>2.1</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.2;jpa=2.1,
              javax.persistence.criteria;version=1.2;jpa=2.1,
              javax.persistence.metamodel;version=1.2;jpa=2.1,
              javax.persistence.spi;version=1.2;jpa=2.1,
              javax.persistence;version=2.1,
              javax.persistence.criteria;version=2.1,
              javax.persistence.metamodel;version=2.1,
              javax.persistence.spi;version=2.1
            </Export-Package>
            <!-- bnd is not correctly handling these imports using wildcards, so they
                 need to be explicitly specified -->
            <Import-Package>
              javax.persistence;version=1.2,
              javax.persistence.criteria;version=1.2,
              javax.persistence.metamodel;version=1.2,
              javax.persistence.spi;version=1.2,
              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.1,2.0,1.0'
            ]]></Provide-Capability>
          </instructions>
          <unpackBundle>true</unpackBundle>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>
