<?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/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>meecrowave</artifactId>
    <groupId>org.apache.meecrowave</groupId>
    <version>1.2.9-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>meecrowave-specs-api</artifactId>
  <name>Meecrowave :: Specs API</name>

  <properties>
    <meecrowave.build.name>${project.groupId}.specs</meecrowave.build.name>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-annotation_1.3_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jcdi_2.0_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-atinject_1.0_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-interceptor_1.2_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-json_1.1_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jsonb_1.0_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jaxrs_2.1_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-servlet-api</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.1</version>
      <executions>
        <execution>
          <id>mw-javaee-api</id>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <createSourcesJar>true</createSourcesJar>
            <useBaseVersion>true</useBaseVersion>
            <createDependencyReducedPom>true</createDependencyReducedPom>
            <artifactSet>
              <excludes>
                <exclude>*:*:sources</exclude>
              </excludes>
            </artifactSet>
            <filters>
              <filter>
                <artifact>org.apache.geronimo.specs:*</artifact>
                <excludes>
                  <exclude>META-INF/*.txt</exclude>
                  <exclude>META-INF/LICENSE</exclude>
                  <exclude>META-INF/NOTICE</exclude>
                  <exclude>org/apache/geronimo/osgi/locator/ProviderLocator.class</exclude>
                  <exclude>org/apache/geronimo/osgi/locator/Activator.class</exclude>
                </excludes>
              </filter>
              <filter>
                <artifact>*:*</artifact>
                <excludes>
                  <exclude>META-INF/LICENSE</exclude>
                  <exclude>META-INF/NOTICE</exclude>
                  <exclude>META-INF/README.txt</exclude>
                </excludes>
              </filter>
            </filters>
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <manifestEntries>
                  <Export-Package>
                    javax.xml,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.handler.soap,javax.xml.ws.spi,javax.xml.ws.http,javax.xml.ws.soap,javax.xml.soap,javax.xml.namespace,javax.xml.registry,javax.xml.registry.infomodel,javax.xml.rpc,javax.xml.rpc.encoding,javax.xml.rpc.handler,javax.xml.rpc.handler.soap,javax.xml.rpc.holders,javax.xml.rpc.server,javax.xml.rpc.soap,javax.xml.stream,javax.xml.stream.events,javax.xml.stream.util,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.bind.helpers,javax.xml.bind.util,javax.activation,javax.annotation,javax.annotation.security,javax.ejb,javax.ejb.spi,javax.interceptor,javax.resource,javax.resource.cci,javax.resource.spi,javax.resource.spi.endpoint,javax.resource.spi.security,javax.resource.spi.work,javax.enterprise,javax.enterprise.deploy,javax.enterprise.deploy.model,javax.enterprise.deploy.model.exceptions,javax.enterprise.deploy.shared,javax.enterprise.deploy.shared.factories,javax.enterprise.deploy.spi,javax.enterprise.deploy.spi.exceptions,javax.enterprise.deploy.spi.factories,javax.enterprise.deploy.spi.status,javax.management,javax.management.j2ee,javax.management.j2ee.statistics,javax.security,javax.security.jacc,javax.jms,javax.persistence,javax.persistence.spi,javax.transaction,javax.transaction.xa,javax.servlet,javax.servlet.http,javax.servlet.resources,javax.jws,javax.ws.rs,javax.jws.soap
                  </Export-Package>
                  <Import-Package>org.apache.geronimo.osgi.registry.api;resolution:=optional</Import-Package>
                  <Private-Package>org.apache.openejb.javaee.api.activator,org.apache.geronimo.osgi.locator
                  </Private-Package>
                  <Bundle-Activator>org.apache.openejb.javaee.api.activator.MultiActivator</Bundle-Activator>
                  <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
                  <Bundle-ManifestVersion>2</Bundle-ManifestVersion>
                  <Bundle-SymbolicName>${project.groupId}.${project.artifactId};singleton=true</Bundle-SymbolicName>
                  <Bundle-Name>${project.name}</Bundle-Name>
                </manifestEntries>
              </transformer>
              <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                <resource>META-INF/LICENSE</resource>
                <file>${project.basedir}/src/main/legal/META-INF/all/LICENSE</file>
              </transformer>
              <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                <resource>META-INF/NOTICE</resource>
                <file>${project.basedir}/src/main/legal/META-INF/all/NOTICE</file>
              </transformer>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer">
              </transformer>
            </transformers>
          </configuration>
        </execution>
      </executions>
      </plugin>
    </plugins>
  </build>

</project>
