<?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/maven-v4_0_0.xsd">
	<!-- the version of maven's project object model -->

	<modelVersion>4.0.0</modelVersion>
	<groupId>org.apache.airavata</groupId>
	<artifactId>airavata-grid-tools</artifactId>
	<name>Airavata Grid Tool Tests</name>
	<description>Standalone test clients to test JGlobus.</description>
	<version>0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

        <prerequisites>
                <maven>3.0</maven>
        </prerequisites>
	
	<parent>
                <groupId>org.apache</groupId>
                <artifactId>apache</artifactId>
                <version>13</version>
                <relativePath />
        </parent>

	<repositories>
       	 	<!--repository>
            		<name>ogce.m2.all</name>
            		<id>ogce.m2.all</id>
            		<url>http://community.ucs.indiana.edu:9090/archiva/repository/ogce.m2.all</url>
        	</repository-->
		<repository>
    			<id>my-local-repo</id>
    			<url>file:./jglobus-repo/repository</url>
  		</repository>
    	</repositories>

	<modules>
		<module>gsi-myproxy-client</module>
		<module>gridftp-client</module>
		<module>gram-client</module>
	</modules>


    <properties>
        <jglobus.version>2.0.6-rc2</jglobus.version>
        <surefire.version>2.12</surefire.version>
        <junit.version>4.7</junit.version>
        <skipTests>false</skipTests>
    </properties>

</project>

