<?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">

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>14</version>
    </parent>

    <!-- This pom is for convenience in building several aries subprojects at once.
     Do not try to use it to deploy or release.-->

    <modelVersion>4.0.0</modelVersion>
    <groupId>org.apache.aries</groupId>
    <artifactId>aries</artifactId>
    <name>Apache Aries</name>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>parent</module>
        <module>eba-maven-plugin</module>
        <module>testsupport</module>
        <module>util</module>
        <module>versioning</module>
        <module>proxy</module>
        <module>quiesce</module>
        <module>blueprint</module>
        <module>jndi</module>
        <module>transaction</module>
        <module>web</module>
        <module>application</module>
        <module>subsystem</module>
        <module>ejb</module>
        <module>jmx</module>
        <module>jpa</module>
        <module>spi-fly</module>
        <module>samples</module>
        <module>esa-ant-task</module>
        <module>esa-maven-plugin</module>
        <module>async</module>
    </modules>

    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
