<?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.15</version>
		<relativePath>../../pom.xml</relativePath>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>gsissh</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>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.jglobus</groupId>
            <artifactId>gram</artifactId>
            <version>${jglobus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.jglobus</groupId>
            <artifactId>gridftp</artifactId>
            <version>${jglobus.version}</version>
        </dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</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.bouncycastle</groupId>
			<artifactId>bcprov-jdk15on</artifactId>
		</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>

	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>xmlbeans-maven-plugin</artifactId>
				<version>2.3.3</version>
				<executions>
					<execution>
						<goals>
							<goal>xmlbeans</goal>
						</goals>
					</execution>
				</executions>
				<inherited>true</inherited>
				<configuration>
					<schemaDirectory>src/main/resources/schemas</schemaDirectory>
					<xmlConfigs>
						<xmlConfig implementation="java.io.File">src/main/resources/schemas/gsissh-schemas.xsdconfig
						</xmlConfig>
					</xmlConfigs>
					<outputJar>target/generated/${project.artifactId}-${project.version}.jar</outputJar>
				</configuration>
			</plugin>
		</plugins>
		<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
		<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
		<testResources>
			<testResource>
				<directory>${project.basedir}/src/test/resources</directory>
			</testResource>
		</testResources>
	</build>

	<properties>
		<jglobus.version>2.1.0</jglobus.version>
		<surefire.version>2.12</surefire.version>
		<junit.version>4.7</junit.version>
		<log4j.version>1.2.17</log4j.version>
		<org.slf4j.version>1.7.2</org.slf4j.version>
		<skipTests>false</skipTests>
		<xmlbeans.version>2.5.0</xmlbeans.version>
	</properties>
</project>

