<?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>
        <artifactId>clerezza</artifactId>
        <groupId>org.apache.clerezza</groupId>
        <version>0.5</version>
        <relativePath>../../parent</relativePath>
    </parent>
    
    <groupId>org.apache.clerezza.provisioning</groupId>
    <artifactId>platform.content</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>feature</packaging>

    <name>Clerezza - Provisioning - Platform Content</name>
    <description>A Karaf feature and partialbundlelist with the bundles providing 
        the clerezza content functionality.
    
        This feature depends on java and OSGi platform libraries (javax.xml,
        org.osgi.service.cm and others), slf4j logging
        - rdf
        - rdf.web
        - platform.graphnodprovider
        - typerendering
        - typehandlerspace   
    </description>

    <dependencies>
        <dependency>
            <groupId>org.apache.clerezza</groupId>
            <artifactId>platform.content</artifactId>
            <version>0.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.clerezza</groupId>
            <artifactId>platform.content.default404</artifactId>
            <version>0.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.clerezza</groupId>
            <artifactId>platform.content.fsadaptor</artifactId>
            <version>0.2</version>
        </dependency>
        <!-- this doesn't strictly belongs to here -->
        <dependency>
            <groupId>org.apache.stanbol</groupId>
            <artifactId>org.apache.stanbol.commons.web.resources</artifactId>
            <version>0.12.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.wymiwyg.karaf.tooling</groupId>
                <artifactId>karaf-sling-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    
</project>
