<?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.commonactivities</groupId>
    <artifactId>apache-taverna-common-activities</artifactId>
    <version>2.1.1-incubating-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Apache Taverna Common Activities</name>
    <properties>

        <!-- Taverna dependency versions -->
        <taverna.language.version>0.15.0-incubating</taverna.language.version>
        <taverna.osgi.version>0.2.1-incubating</taverna.osgi.version>
        <taverna.engine.version>3.1.0-incubating</taverna.engine.version>

        <!-- Third-party dependency versios -->
        <abdera.version>1.1.3</abdera.version>
        <bsh.version>2.0b6</bsh.version>
        <servicemix.javax.wsdl.version>1.6.3_1</servicemix.javax.wsdl.version>
        <javacsv.version>2.0</javacsv.version>
        <jsch.version>1.0.6.RELEASE</jsch.version>
        <odfdom.version>0.7</odfdom.version>
        <!-- <odfdom.version>0.8.8-incubating</odfdom.version> -->
        <santuario.xmlsec.version>1.5.7</santuario.xmlsec.version>
        <xmlschema.version>2.2.1</xmlschema.version>
        <velocity.version>1.7</velocity.version>
        <webdavservlet.version>2.0</webdavservlet.version>
        <woden.version>1.0M10</woden.version>
        <wss4j.version>1.6.18</wss4j.version>
    </properties>
    <modules>
        <module>taverna-docker-activity</module>
        <module>taverna-beanshell-activity</module>
        <module>taverna-external-tool-activity</module>
        <module>taverna-interaction-activity</module>
        <module>taverna-rest-activity</module>
        <module>taverna-spreadsheet-import-activity</module>
        <module>taverna-wsdl-activity</module>
        <module>taverna-wsdl-generic</module>
        <module>taverna-xpath-activity</module>
    </modules>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <excludes combine.children="append">
                        <exclude>**/src/main/resources/META-INF/soap-encoding.xsd</exclude> <!-- W3C Software License (See NOTICE) -->
                        <exclude>**/src/test/resources/test-spreadsheet*</exclude> <!--  Our own test spreadsheets -->
                        <exclude>**/src/main/resources/json2.js</exclude><!-- public domain -->
                    </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>
                    </links>
                </configuration>
            </plugin>
        </plugins>
    </build>    
    <scm>
        <connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities.git</connection>
        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities.git</developerConnection>
        <url>https://github.com/apache/incubator-taverna-common-activities</url>
        <tag>HEAD</tag>
    </scm>
    <repositories>
        <repository>
            <id>apache.snapshots</id>
            <name>Apache Snapshot Repository</name>
            <url>https://repository.apache.org/snapshots</url>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
    </repositories>

</project>
