<?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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.marmotta</groupId>
        <artifactId>marmotta-parent</artifactId>
        <version>3.4.0-SNAPSHOT</version>
        <relativePath>../../../parent</relativePath>
    </parent>

    <name>LDPath Bundle</name>
    <description>
      OSGI bundle for LDPath Core. This embedds all functions to allow loading
      of those via the Java ServiceLoader.
    </description>
    <artifactId>ldpath-core-bundle</artifactId>
    <packaging>bundle</packaging>

    <dependencies>

        <dependency>
            <groupId>org.apache.marmotta</groupId>
            <artifactId>ldpath-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.marmotta</groupId>
            <artifactId>ldpath-core</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-collections</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-date</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-html</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-math</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-text</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-xml</artifactId>
          <version>${project.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.marmotta</groupId>
          <artifactId>ldpath-functions-json</artifactId>
          <version>${project.version}</version>
        </dependency>
    </dependencies>



    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-Category>Apache Marmotta LDPath</Bundle-Category>
                        <Bundle-DocURL>http://wiki.apache.org/marmotta/LDPath</Bundle-DocURL>
                        <_versionpolicy>$${version;===;${@}}</_versionpolicy>
                        <!-- 
                          NOTES: 
                            * jdom2 is required for using the ldpath-functions-xml
                            * jsoup is required for using the ldpath-functions-html
                            * jsonpath is required for using the ldpath-functions-json
                          -->
                        <Import-Package>
                          org.slf4j.*;version="[1.6,2)",
                          com.google.common.*;version="[14,17)",
                          ch.qos.logback.classic;resolution:=optional,
                          org.jdom2.*;resolution:=optional,
                          org.jsoup.*;resolution:=optional,
                          com.jayway.jsonpath.*;resolution:=optional,
                          *
                        </Import-Package>
                        <_exportcontents>
                            org.apache.marmotta.ldpath;version=${project.version},
                            org.apache.marmotta.ldpath.exception;version=${project.version},
                            org.apache.marmotta.ldpath.model.*;version=${project.version},
                            org.apache.marmotta.ldpath.parser;version=${project.version},
                            org.apache.marmotta.ldpath.util;version=${project.version}
                        </_exportcontents>
                        <Embed-Dependency>
                          ldpath-core,
                          ldpath-functions-collections, ldpath-functions-date,
                          ldpath-functions-html, ldpath-functions-math,
                          ldpath-functions-text, ldpath-functions-xml,
                          ldpath-functions-json
                        </Embed-Dependency>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
