<!-- 

 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.1.2</version>  
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>abdera-couchdb</artifactId>
    <packaging>bundle</packaging>
    <name>Abdera CouchDB Adapter</name>
    <version>1.1.2</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>
