<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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/maven-v4_0_0.xsd">
    
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.sling</groupId>
        <artifactId>sling-bundle-parent</artifactId>
        <version>39</version>
        <relativePath />
    </parent>

    <artifactId>org.apache.sling.javax.activation</artifactId>
    <version>0.2.0</version>

    <name>Apache Sling javax.activation bundle</name>
    <description>The Apache Sling javax.activation bundle contributes an OSGi-compatible activation bundle.</description>
    
    <properties>
        <project.build.outputTimestamp>2020-07-28T15:18:40Z</project.build.outputTimestamp>
        <javax.activation.version>1.2.2</javax.activation.version>
        <site.javadoc.exclude>**.impl.**</site.javadoc.exclude>
    </properties>    

    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-javax-activation.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-javax-activation.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-javax-activation.git</url>
      <tag>org.apache.sling.javax.activation-0.2.0</tag>
  </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>biz.aQute.bnd</groupId>
                <artifactId>bnd-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>bnd-process-nodeps</id>
                        <goals>
                            <goal>bnd-process</goal>
                        </goals>
                        <configuration>
                            <bnd><![CDATA[
Bundle-Name: ${project.name} (Framework Fragment, No embedded dependencies)
Bundle-SymbolicName: ${project.artifactId}.nodeps
ExtensionBundle-Activator: org.apache.sling.javax.activation.internal.Activator
# Using exportcontents avoids embedding of the packages
-exportcontents: javax.activation;version="0.0.0",com.sun.activation.registries;version="0.0.0",com.sun.activation.viewers;version="0.0.0"
Import-Package: !javax.activation,!com.sun.activation.registries,!com.sun.activation.viewers
Provide-Capability: osgi.contract;osgi.contract=JavaActivation;version:List<Version>="1.1,1.1.1";uses:="javax.activation"
Fragment-Host: system.bundle;extension:=framework
]]>
                            </bnd>
                            <manifestPath>${project.build.directory}/nodeps-classes/META-INF/MANIFEST.MF</manifestPath>
                            <outputDir>${project.build.directory}/nodeps-classes</outputDir>
                        </configuration>
                    </execution>
                    <execution>
                        <id>bnd-process</id>
                        <configuration>
                            <bnd><![CDATA[
-includeresource:@jakarta.activation-[0-9.]*(-SNAPSHOT)?.jar
# version automatically determined from the MANIFEST.MF of the jakarta.activation.jar
Bundle-Activator: org.apache.sling.javax.activation.internal.Activator
Export-Package: javax.activation,com.sun.activation.registries,com.sun.activation.viewers
Provide-Capability: osgi.contract;osgi.contract=JavaActivation;version:List<Version>="1.1,1.1.1,1.2";uses:="javax.activation"
]]>
                            </bnd>
                            <manifestPath>${project.build.directory}/deps-classes/META-INF/MANIFEST.MF</manifestPath>
                            <outputDir>${project.build.directory}/deps-classes</outputDir>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <configuration>
                            <classesDirectory>${project.build.directory}/deps-classes</classesDirectory>
                            <archive>
                                <manifestFile>${project.build.directory}/deps-classes/META-INF/MANIFEST.MF</manifestFile>
                            </archive>
                        </configuration>
                    </execution>
                    <execution>
                        <id>jar-nodeps</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>nodeps</classifier>
                            <classesDirectory>${project.build.directory}/nodeps-classes</classesDirectory>
                            <archive>
                                <manifestFile>${project.build.directory}/nodeps-classes/META-INF/MANIFEST.MF</manifestFile>
                            </archive>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- https://eclipse-ee4j.github.io/jaf/ -->
        <dependency>
            <groupId>com.sun.activation</groupId>
            <artifactId>jakarta.activation</artifactId>
            <version>${javax.activation.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.annotation.bundle</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.framework</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.util.tracker</artifactId>
            <version>1.5.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
