<?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>4-incubating-SNAPSHOT</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.16.0-incubating-SNAPSHOT</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-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://gitbox.apache.org/repos/asf/incubator-taverna-common-activities.git</connection>
        <developerConnection>scm:git:git@github.com:apache/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>
