<?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.1.1-SNAPSHOT</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>2019-10-02T08:04:00Z</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>
    </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
Export-Package: 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";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.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}/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>
