<?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>2-incubating</version>
	</parent>
	<groupId>org.apache.taverna.commandline</groupId>
	<artifactId>apache-taverna-commandline</artifactId>
	<version>3.1.0-incubating-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>Apache Taverna Commandline</name>
	  <properties>
	    <taverna.language.version>0.15.2-incubating-SNAPSHOT</taverna.language.version>
	    <taverna.osgi.version>0.2.1-incubating</taverna.osgi.version>
	    <taverna.engine.version>3.1.0-incubating-SNAPSHOT</taverna.engine.version>
	    <taverna.commonactivities.version>2.1.0-incubating-SNAPSHOT</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.7.0</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>
                </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>
