<?xml version="1.0" encoding="UTF-8" ?>
<!--
    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</artifactId>
        <version>0.9.0-incubator-SNAPSHOT</version>
        <relativePath>../pom/pom.xml</relativePath>
    </parent>
    <packaging>pom</packaging>
    <name>Apache Felix Commons: Build</name>
    <groupId>org.apache.felix.commons</groupId>
    <artifactId>build</artifactId>
    <description>
        These subprojects wrap common third-party jars as OSGi bundles.
    </description>
    <modules>
        <module>activation</module>
        <module>antlr</module>
        <module>aopalliance</module>
        <module>avalon-framework</module>
        <module>cglib</module>
        <module>commons-attributes-api</module>
        <module>commons-attributes-compiler</module>
        <module>commons-beanutils</module>
        <module>commons-codec</module>
        <module>commons-collections</module>
        <module>commons-configuration</module>
        <module>commons-digester</module>
        <module>commons-el</module>
        <module>commons-email</module>
        <module>commons-fileupload</module>
        <module>commons-httpclient</module>
        <module>commons-io</module>
        <module>commons-jxpath</module>
        <module>commons-lang</module>
        <module>commons-logging</module>
        <module>commons-validator</module>
        <module>dom4j</module>
        <module>ehcache</module>
        <module>hibernate</module>
        <!--<module>hsqldb</module>-->
        <!--<module>jms</module>-->
        <!--<module>jmxtools</module>-->
        <module>jstl</module>
        <!--<module>jta</module>-->
        <module>jzlib</module>
        <module>log4j</module>
        <module>logkit</module>
        <module>mail</module>
        <module>poi</module>
        <module>portlet-api</module>
        <module>servlet-api</module>
        <module>xercesImpl</module>
        <module>xml-apis</module>
        <module>xml-resolver</module>
    </modules>
</project>
