<!--
    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">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.felix</groupId>
        <artifactId>felix-parent</artifactId>
        <version>5</version>
        <relativePath>../pom/pom.xml</relativePath>
    </parent>

    <name>Apache Felix Http Reactor</name>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.http</artifactId>
    <version>7-SNAPSHOT</version>
    <packaging>pom</packaging>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/http</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/http</developerConnection>
        <url>http://svn.apache.org/viewvc/felix/trunk/http/</url>
    </scm>
    
    <modules>
        <module>servlet-api</module>
        <module>base</module>
        <module>bridge</module>
        <module>jetty</module>
        <module>parent</module>
        <module>proxy</module>
        <module>whiteboard</module>
        <module>cometd</module>
        <module>bundle</module>
        <module>sslfilter</module>
        <module>itest</module>
        <module>samples/bridge</module>
        <module>samples/whiteboard</module>
        <module>samples/cometd</module>
    </modules>
</project>
