<?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.aries.jmx</groupId>
        <artifactId>org.apache.aries.jmx.parent</artifactId>
        <version>1.1.6-SNAPSHOT</version>
        <relativePath>jmx-parent</relativePath>
    </parent>  

    <groupId>org.apache.aries.jmx</groupId>
    <artifactId>jmx</artifactId>
    <name>Apache Aries JMX</name>
    <packaging>pom</packaging>
    <description>Implementation of the JMX Management Model Specification - reactor pom</description>

    <scm>
        <connection>scm:svn:http://svn.apache.org/repos/asf/aries/trunk/jmx</connection>
        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/aries/trunk/jmx</developerConnection>
        <url>http://svn.apache.org/viewvc/aries/trunk/jmx</url>
    </scm>

    <modules>
        <module>jmx-parent</module>
        <module>jmx-api</module>
        <module>jmx-blueprint-api</module>
        <module>jmx-core</module>
        <module>jmx-core-whiteboard</module>
        <module>jmx-whiteboard</module>
        <module>jmx-blueprint-core</module>
        <module>jmx-bundle</module>
        <module>jmx-blueprint-bundle</module>
        <module>jmx-itests</module>
    </modules>

</project>
