<!--
   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/maven-v4_0_0.xsd">
	<parent>
		<groupId>org.apache.abdera</groupId>
		<artifactId>abdera</artifactId>
		<version>0.4.0-incubating</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<artifactId>abdera-extensions-parent</artifactId>
	<packaging>pom</packaging>
	<name>Abdera Extensions</name>
	<version>0.4.0-incubating</version>
	<description>Abdera Extensions</description>

  <properties>
    <topDir>${basedir}/..</topDir>
  </properties>
  
	<modules>
    <module>gdata</module>
		<module>geo</module>
    <module>html</module>
    <module>json</module>
    <module>main</module>
    <module>media</module>
    <module>oauth</module>
    <module>opensearch</module>
    <module>serializer</module>
    <module>sharing</module>
    <module>wsse</module>	</modules>

</project>