<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
      	<groupId>org.apache.taverna.language</groupId>
      	<artifactId>apache-taverna-language</artifactId>
      	<version>0.15.1-incubating</version>
    </parent>
    <artifactId>taverna-tavlang-tool</artifactId>
    <name>Apache Taverna tavlang tool</name>
    <description>Command line for Taverna Language</description>


    <dependencies>

    	<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
		</dependency>

		<dependency>
			<groupId>${project.parent.groupId}</groupId>
			<artifactId>taverna-scufl2-api</artifactId>
			<version>${project.parent.version}</version>
		</dependency>

		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>taverna-scufl2-wfbundle</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>taverna-scufl2-t2flow</artifactId>
			<version>${project.version}</version>
		</dependency>

<!-- 		<dependency> -->
<!-- 			<groupId>org.shiwa.iwir</groupId> -->
<!-- 			<artifactId>iwir</artifactId> -->
<!-- 			<version>1.1.4</version> -->
<!-- 			<scope>optional</scope> -->
<!-- 			<systemPath>${project.build.directory}/taverna-language-commandline/lib/</systemPath> -->
<!-- 		</dependency> -->

    <!-- Disabled due to LGPL depenency
   	 <dependency>
		<groupId>no.s11.scufl2</groupId>
		<artifactId>scufl2-iwir</artifactId>
		<version>0.2-SNAPSHOT</version>
        <optional>true</optional>
    </dependency>
-->


		<dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>xstream</artifactId>
			<version>1.4.8</version>
		</dependency>


		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>taverna-scufl2-wfdesc</artifactId>
			<version>${project.version}</version>
		</dependency> 
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>

		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>taverna-scufl2-ucfpackage</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>taverna-robundle</artifactId>
			<version>${project.version}</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>io.airlift</groupId>
			<artifactId>airline</artifactId>
			<!-- <version>${io.airlift.airline.version}</version> -->
			<version>0.7</version>
		</dependency>


	</dependencies>

	<build>
		<!-- TODO: plugins for launchers and executable jar files? -->
		<plugins>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<version>1.1.1</version>
				<executions>
					<execution>
						<id>assemble</id>
						<phase>package</phase>
						<goals>
							<goal>assemble</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<repositoryLayout>flat</repositoryLayout>
					<repositoryName>lib</repositoryName>
					<assembleDirectory>${project.build.directory}/${project.artifactId}</assembleDirectory>
					<programs>
						<program>
							<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
							<name>tavlang</name>
						</program>
					</programs>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<transformers>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
									<mainClass>org.apache.taverna.tavlang.TavernaCommandline</mainClass>
								</transformer>
								<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer">
                    			<addHeader>false</addHeader>
                    			</transformer>
							</transformers>
						</configuration>
					</execution>
				</executions>
			</plugin>


		</plugins>
	</build>

	<repositories>
    <!-- Enable the below if using scufl2-iwir
		<repository>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots />
			<id>mygrid-repository</id>
			<name>myGrid Repository</name>
			<url>http://www.mygrid.org.uk/maven/repository</url>
		</repository>

		<repository>
			<id>mygrid-snapshot-repository</id>
			<name>myGrid Snapshot Repository</name>
			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots />
		</repository>
-->

		<repository>
			<id>apache.snapshots</id>
			<name>Apache Snapshot Repository</name>
			<url>http://repository.apache.org/snapshots</url>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
	</repositories>

</project>
