<!--

    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>taverna-parent</artifactId>
		<version>2-incubating-SNAPSHOT</version>
	</parent>
	<groupId>org.apache.taverna.osgi</groupId>
	<artifactId>apache-taverna-osgi</artifactId>
	<version>0.2.1-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>http://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>
