<!-- 
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>

<packaging>pom</packaging>

<parent>
<groupId>org.apache.felix</groupId>
<artifactId>felix</artifactId>
<version>0.9.0-incubator-SNAPSHOT</version>
</parent>

<name>Apache Felix EventAdmin Projects</name>
<artifactId>org.apache.felix.eventadmin-projects</artifactId>

<modules>
<module>impl</module>
<module>bridge.upnp</module>
<module>bridge.configuration</module>
<module>bridge.useradmin</module>
<module>bridge.wireadmin</module>
</modules>
</project>
