<!--

    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</version>
	</parent>
	<groupId>org.apache.taverna.osgi</groupId>
	<artifactId>apache-taverna-osgi</artifactId>
	<version>0.2.2-incubating-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>Apache Taverna OSGi plugin system</name>
	<description>OSGi-based plugin system, including
online updates. Written for Apache Taverna,
probably usable for any OSGi-based
command line/desktop product.</description>
	<scm>
		<connection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-taverna-osgi.git</connection>
		<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-taverna-osgi.git</developerConnection>
		<url>https://github.com/apache/incubator-taverna-osgi</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>
	<modules>
		<module>xml-parser-service</module>
		<module>xml-transformer-service</module>
		<module>taverna-osgi-launcher</module>
		<module>taverna-app-configuration-api</module>
		<module>taverna-app-configuration-impl</module>
		<module>taverna-configuration-api</module>
		<module>taverna-configuration-impl</module>
		<module>taverna-download-api</module>
		<module>taverna-download-impl</module>
		<module>taverna-maven-plugin</module>
		<module>taverna-plugin-api</module>
		<module>taverna-plugin-impl</module>
		<module>taverna-update-api</module>
		<module>taverna-update-impl</module>
		<module>taverna-osgi-schemas</module>
	</modules>
</project>
