<!-- 
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>1.1.0-SNAPSHOT</version>
<relativePath>../pom/pom.xml</relativePath>
</parent>

<name>Apache Felix EventAdmin Projects</name>
<artifactId>org.apache.felix.eventadmin-projects</artifactId>
<version>0.9.0-SNAPSHOT</version>
<modules>
<module>impl</module>
<module>bridge.upnp</module>
<module>bridge.configuration</module>
<module>bridge.useradmin</module>
<module>bridge.wireadmin</module>
</modules>
</project>
