<?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.50</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>

