<!-- 

 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  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.  For additional information regarding
 copyright in this work, please see the NOTICE file in the top level
 directory of this distribution.
-->
<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">
    <parent>
        <groupId>org.apache.abdera</groupId>
        <artifactId>abdera-adapters-parent</artifactId>
        <version>1.2-SNAPSHOT</version>  
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>abdera-couchdb</artifactId>
    <packaging>bundle</packaging>
    <name>Abdera CouchDB Adapter</name>
    <version>1.2-SNAPSHOT</version>  
	      
    <properties>
      <topDir>${basedir}/../..</topDir>
      <abdera.osgi.default.exports>
        org.apache.abdera.protocol.server.adapters.couchdb.*
      </abdera.osgi.default.exports>
	</properties>
    
    <dependencies>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.2.1</version>  
            <classifier>jdk15</classifier>
        </dependency>

        <dependency>
            <groupId>com.google.code</groupId>
            <artifactId>couchdb4j</artifactId>
            <version>0.1.2</version>  
        </dependency>
    </dependencies>
    
    <repositories>
      <repository>
        <id>dandiep.apache</id>
        <name>Temporary repo for couchdb4j until it ends up on central.</name>
        <url>http://people.apache.org/~dandiep/repo/</url>
      </repository> 
    </repositories>
</project>
