<?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>osgi-airavata</artifactId>
	<name>Airavata OSGI Implementation</name>
	<description>OSGI based Airavata implementation.</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>common</module>
		<module>client</module>
		<module>server</module>
		<module>ui</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>

