<?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</groupId>
		<artifactId>apache-taverna-parent</artifactId>
		<version>3-incubating-SNAPSHOT</version>
	</parent>
	<groupId>org.apache.taverna.commandline</groupId>
	<artifactId>apache-taverna-commandline</artifactId>
	<version>3.1.1-incubating-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>Apache Taverna Command-line Tool</name>
	  <properties>
	    <taverna.language.version>0.15.1-incubating</taverna.language.version>
	    <taverna.osgi.version>0.2.1-incubating</taverna.osgi.version>
	    <taverna.engine.version>3.1.0-incubating</taverna.engine.version>
	    <taverna.commonactivities.version>2.1.0-incubating</taverna.commonactivities.version>
	    
            <!-- Bring forward updated dependency properties 
                 from apache-taverna-parent 3-incubating-SNAPSHOT 
                 (FIXME: Remove these once taverna-parent 3 is released)
            -->
	    <jena.version>3.1.0</jena.version>
            <servicemix.xerces.version>2.11.0_1</servicemix.xerces.version>
	    <apache.httpclient.version>4.5.2</apache.httpclient.version>
	    <apache.httpcore.version>4.4.4</apache.httpcore.version>
            <jackson.version>2.6.6</jackson.version>
            <jsonldjava.version>0.8.2</jsonldjava.version>
            <commons.configuration.version>1.10</commons.configuration.version>
            <slf4j.version>1.7.20</slf4j.version>
            <dexx.collection.version>0.6</dexx.collection.version>






            <!-- 
            Update below version number to match the <version> above.

            This osgiversion is required for passing the parsed
            org.apache.taverna.commandline.options.CommandLineOptions
            from the taverna-commandline-launcher (running outside OSGi)
            to taverna-commandline-common (running inside OSGi)
            and therefore must be a falid x.y.z.0 OSGi version number
            corresponding to the ${pom.version} - but without -SNAPSHOT
            or -incubating
            -->
            <taverna.commandline.osgiversion>3.1.0.0</taverna.commandline.osgiversion>
            <commons.cli.version>1.3.1</commons.cli.version>
	    <osgi.felix.version>4.6.1</osgi.felix.version>
	  </properties>
	<modules>
    <module>taverna-commandline-api</module>
    <module>taverna-commandline-common</module>
    <module>taverna-commandline-launcher</module>
    <module>taverna-commandline-product</module>
    <!--
    <module>taverna-commandline-tests</module>
    -->
  </modules>
        <build>
                <plugins>
                      <plugin>
                        <groupId>org.apache.rat</groupId>
                        <artifactId>apache-rat-plugin</artifactId>
                        <configuration>
                                <excludes combine.children="append">
                                        <exclude>**/src/test/resources/workflows/</exclude> <!-- workflow files and expected inputs/outputs -->
                                        <exclude>**/src/main/resources/help.txt</exclude> <!-- shown verbatim in -h -->
                                </excludes>
                        </configuration>
                        </plugin>

            <plugin>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <links>
                        <link>https://taverna.incubator.apache.org/javadoc/taverna-language/</link>
                        <link>https://taverna.incubator.apache.org/javadoc/taverna-osgi/</link>
                        <link>https://taverna.incubator.apache.org/javadoc/taverna-engine/</link>
                        <link>https://taverna.incubator.apache.org/javadoc/taverna-common-activities/</link>
                    </links>
                </configuration>
            </plugin>



                </plugins>
        </build>

  <scm>
    <connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-taverna-commandline.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-taverna-commandline.git</developerConnection>
    <url>https://github.com/apache/incubator-taverna-commandline</url>
    <tag>HEAD</tag>
  </scm>

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