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

    <artifactId>org.apache.sling.commons.scheduler</artifactId>
    <packaging>bundle</packaging>
    <version>2.5.2</version>

    <name>Apache Sling Scheduler Support</name>
    <description>
        Support for scheduling.
    </description>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.scheduler-2.5.2</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/tags/org.apache.sling.commons.scheduler-2.5.2</developerConnection>
        <url>http://svn.apache.org/viewvc/sling/tags/org.apache.sling.commons.scheduler-2.5.2</url>
    </scm>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Private-Package>
                            org.apache.sling.commons.scheduler.impl
                        </Private-Package>
                        <Import-Package>
                            !commonj.work,
                            !com.mchange.v2.c3p0,
                            !javax.ejb,
                            !javax.jms,
                            !javax.mail,
                            !javax.mail.internet,
                            !oracle.sql,
                            !org.jboss.logging,
                            !org.jboss.naming,
                            !org.jboss.system,
                            !org.quartz.jobs,
                            !org.terracotta.toolkit,
                            !org.terracotta.toolkit.atomic,
                            !org.terracotta.toolkit.builder,
                            !org.terracotta.toolkit.cluster,
                            !org.terracotta.toolkit.collections,
                            !org.terracotta.toolkit.concurrent.locks,
                            !org.terracotta.toolkit.config,
                            !org.terracotta.toolkit.rejoin,
                            !org.terracotta.toolkit.internal,
                            !org.terracotta.toolkit.internal.concurrent.locks,
                            !org.terracotta.toolkit.search,
                            !org.terracotta.toolkit.search.attribute,
                            !org.terracotta.toolkit.store,
                            !weblogic.jdbc.jts,
                            !weblogic.jdbc.vendor.oracle,
                            org.apache.sling.discovery;resolution:=optional,
                            org.apache.sling.settings;resolution:=optional,
                            *                        
                        </Import-Package>
                        <DynamicImport-Package>
                            org.apache.sling.discovery;version="[1.0,2)",
                            org.apache.sling.settings;version="[1.0,2)",
                            commonj.work,
                            com.mchange.v2.c3p0,
                            javax.ejb,
                            javax.jms,
                            javax.mail,
                            javax.mail.internet,
                            oracle.sql,
                            org.jboss.logging,
                            org.jboss.naming,
                            org.jboss.system,
                            org.quartz.jobs,
                            org.terracotta.toolkit,
                            org.terracotta.toolkit.atomic,
                            org.terracotta.toolkit.builder,
                            org.terracotta.toolkit.cluster,
                            org.terracotta.toolkit.collections,
                            org.terracotta.toolkit.concurrent.locks,
                            org.terracotta.toolkit.config,
                            org.terracotta.toolkit.internal,
                            org.terracotta.toolkit.internal.concurrent.locks,
                            org.terracotta.toolkit.rejoin,
                            org.terracotta.toolkit.search,
                            org.terracotta.toolkit.search.attribute,
                            org.terracotta.toolkit.store,
                            weblogic.jdbc.jts,
                            weblogic.jdbc.vendor.oracle
                        </DynamicImport-Package>
                        <Embed-Dependency>
                            quartz
                        </Embed-Dependency>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <excludePackageNames>
                        org.apache.sling.commons.scheduler.impl
                    </excludePackageNames>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.scr.annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>osgi.cmpn</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.commons.threads</artifactId>
            <version>3.2.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.discovery.api</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.settings</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
            <version>1.2.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.discovery.impl</artifactId>
            <version>1.1.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.junit.core</artifactId>
            <version>1.0.10</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
