<!--
/*
 * 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">
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<bundle.symbolicName>org.apache.usergrid</bundle.symbolicName>
		<bundle.namespace>org.apache.usergrid</bundle.namespace>
	</properties>

	<parent>
		<groupId>org.apache.usergrid</groupId>
		<artifactId>usergrid</artifactId>
		<version>1.0.0</version>
		<relativePath>../../stack</relativePath>
	</parent>
	
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.apache.usergrid</groupId>
	<artifactId>usergrid-android-client</artifactId>
	<version>0.0.8-SNAPSHOT</version>
	
	<packaging>jar</packaging>
	<description>An Android client for usergrid</description>
	<url>http://usergrid.incubator.apache.org</url>
	
	<licenses>
		<license>
			<name>The Apache Software License, Version 2.0</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<developers>
		<developer>
			<id>eanuff</id>
			<name>Ed Anuff</name>
		</developer>
		<developer>
			<id>tnine</id>
			<name>Todd Nine</name>
		</developer>
		<developer>
			<id>sganyo</id>
			<name>Scott Ganyo</name>
		</developer>
	</developers>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.9.1</version>
                <configuration>
                   <doclet>com.sun.tools.doclets.standard.Standard</doclet>
                </configuration>
            </plugin>
        </plugins>
    </build>
	
	<dependencies>
		<dependency>
			<groupId>org.usergrid</groupId>
			<artifactId>usergrid-java-client</artifactId>
			<version>0.0.6</version>
		</dependency>
		<dependency>
			<groupId>com.google.android</groupId>
			<artifactId>android</artifactId>
			<version>2.2.1</version>
			<scope>provided</scope>
		</dependency>
	</dependencies>

    <repositories>
        <repository>
            <id>local-dependencies</id>
            <name>local-depedendencies</name>
            <url>file://${project.basedir}/m2/repository</url>
        </repository>
    </repositories>
    <name>Apache Usergrid Android SDK</name>
    <issueManagement>
    	<system>JIRA</system>
    	<url>https://issues.apache.org/jira/browse/USERGRID</url>
    </issueManagement>
    <organization>
    	<name>The Apache Software Foundation</name>
    	<url>http://apache.org</url>
    </organization>
</project>