<?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 -->

	<parent>
		<groupId>org.apache.airavata</groupId>
		<artifactId>airavata</artifactId>
		<version>0.14-SNAPSHOT</version>
		<relativePath>../../pom.xml</relativePath>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>gsissh-cli-tools</artifactId>
	<name>GSISSH Library</name>
	<description>The core function of the library is to do GSISSH interactions.</description>
	<url>http://airavata.apache.org/</url>

	<prerequisites>
		<maven>3.0</maven>
	</prerequisites>

	<dependencies>
		<dependency>
			<groupId>org.apache.airavata</groupId>
			<artifactId>gsissh</artifactId>
			<version>0.14-SNAPSHOT</version>
		</dependency>	  
		<dependency>
			<groupId>com.jcraft</groupId>
			<artifactId>jsch</artifactId>
			<version>0.1.53</version>
		</dependency>
		<dependency>
			<groupId>org.jglobus</groupId>
			<artifactId>myproxy</artifactId>
			<version>${jglobus.version}</version>
		</dependency>
		<dependency>
			<groupId>org.jglobus</groupId>
			<artifactId>gss</artifactId>
			<version>${jglobus.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
		</dependency>
		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>6.1.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.ogce</groupId>
			<artifactId>bcgss</artifactId>
			<version>146</version>
		</dependency>
		<dependency>
			<groupId>org.apache.xmlbeans</groupId>
			<artifactId>xmlbeans</artifactId>
			<version>${xmlbeans.version}</version>
		</dependency>
		<dependency>
			<groupId>com.jcabi</groupId>
			<artifactId>jcabi-aspects</artifactId>
			<version>0.9</version>
			<exclusions>
				<exclusion>
					<groupId>org.jboss.logging</groupId>
					<artifactId>jboss-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.6.12</version>
			<scope>runtime</scope>
		</dependency>

	</dependencies>


	<properties>
		<jglobus.version>2.0.6</jglobus.version>
		<skipTests>false</skipTests>
		<xmlbeans.version>2.5.0</xmlbeans.version>
	</properties>
</project>

