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

    <name>Apache Felix Logback ITests Reactor</name>
    <artifactId>org.apache.felix.logback.itests.reactor</artifactId>
    <groupId>org.apache.felix</groupId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <scm>
        <connection>scm:git:https://github.com/apache/felix-dev.git</connection>
        <developerConnection>scm:git:https://github.com/apache/felix-dev.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=felix-dev.git</url>
    </scm>

    <modules>
        <module>test-helper</module>
        <module>immediate-equinox-logservice</module>
        <module>immediate-felix-logservice</module>
        <module>immediate-jbl</module>
        <module>immediate-jcl</module>
        <module>immediate-jul</module>
        <module>immediate-jul-felix</module>
        <module>immediate-log4j1</module>
        <module>immediate-log4j2</module>
        <module>immediate-slf4j</module>
        <module>standard-equinox-logservice</module>
        <module>standard-felix-logservice</module>
        <module>standard-jbl</module>
        <module>standard-jcl</module>
        <module>standard-jul</module>
        <module>standard-log4j1</module>
        <module>standard-log4j2</module>
        <module>standard-slf4j</module>
    </modules>
</project>
