<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.logging</groupId>
    <artifactId>logging-parent</artifactId>
    <version>1</version>
  </parent>

  <groupId>org.apache.logging.log4j.boot</groupId>
  <artifactId>log4j-boot-parent</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>Apache Log4j Boot</name>
  <description>
    Log4j Boot is a collection of dependency management modules for Maven- and Ivy-compatible dependency management
    systems. These modules provide necessary third party dependencies for various extra plugins for Log4j 2.x including
    compatibility APIs.
  </description>
  <url>https://logging.apache.org/log4j/boot/</url>

  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <log4jVersion>2.7.1-SNAPSHOT</log4jVersion>
    <slf4jVersion>1.7.22</slf4jVersion>
    <activemqVersion>5.14.1</activemqVersion>
    <cassandraVersion>3.1.0</cassandraVersion>
    <compressVersion>1.13</compressVersion>
    <conversantVersion>1.2.10</conversantVersion>
    <couchdbVersion>0.0.6</couchdbVersion>
    <csvVersion>1.4</csvVersion>
    <disruptorVersion>3.3.6</disruptorVersion>
    <groovyVersion>2.4.8</groovyVersion>
    <jacksonVersion>2.8.6</jacksonVersion>
    <jansiVersion>1.14</jansiVersion>
    <javamailVersion>1.5.6</javamailVersion>
    <jctoolsVersion>1.2.1</jctoolsVersion>
    <jeromqVersion>0.3.6</jeromqVersion>
    <jmdnsVersion>3.5.1</jmdnsVersion>
    <logbackVersion>1.1.8</logbackVersion>
    <kafkaVersion>0.10.1.1</kafkaVersion>
    <mongodbVersion>3.4.1</mongodbVersion>
    <springbootVersion>1.4.3.RELEASE</springbootVersion>
  </properties>

  <modules>
    <module>core</module>
    <module>async</module>
    <module>compat</module>
    <module>logback</module>
    <module>advertiser/jmdns</module>
    <module>appender/async-conversant</module>
    <module>appender/async-jctools</module>
    <module>appender/cassandra</module>
    <module>appender/compress</module>
    <module>appender/couchdb</module>
    <module>appender/activemq</module>
    <module>appender/jms</module>
    <module>appender/jpa</module>
    <module>appender/kafka</module>
    <module>appender/mongodb</module>
    <module>appender/smtp</module>
    <module>appender/zeromq</module>
    <module>config/json</module>
    <module>config/yaml</module>
    <module>layout/csv</module>
    <module>layout/jansi</module>
    <module>layout/json</module>
    <module>layout/xml</module>
    <module>layout/yaml</module>
    <module>script/groovy</module>
    <module>spring</module>
  </modules>

  <scm>
    <connection>scm:git:git://git.apache.org/logging-log4j-boot.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-boot.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=logging-log4j-boot.git</url>
  </scm>

  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/job/Log4jBoot/</url>
  </ciManagement>

  <mailingLists>
    <mailingList>
      <name>log4j-user</name>
      <subscribe>log4j-user-subscribe@logging.apache.org</subscribe>
      <unsubscribe>log4j-user-unsubscribe@logging.apache.org</unsubscribe>
      <post>log4j-user@logging.apache.org</post>
      <archive>https://lists.apache.org/list.html?log4j-user@logging.apache.org</archive>
      <otherArchives>
        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-log4j-user/</otherArchive>
        <otherArchive>http://marc.info/?l=log4j-user</otherArchive>
        <otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.user</otherArchive>
      </otherArchives>
    </mailingList>
    <mailingList>
      <name>log4j-dev</name>
      <subscribe>log4j-dev-subscribe@logging.apache.org</subscribe>
      <unsubscribe>log4j-dev-unsubscribe@logging.apache.org</unsubscribe>
      <post>log4j-dev@logging.apache.org</post>
      <archive>https://lists.apache.org/list.html?log4j-dev@logging.apache.org</archive>
      <otherArchives>
        <otherArchive>http://mail-archives.apache.org/mod_mbox/logging-log4j-dev/</otherArchive>
        <otherArchive>http://marc.info/?l=log4j-dev</otherArchive>
        <otherArchive>http://dir.gmane.org/gmane.comp.jakarta.log4j.devel</otherArchive>
      </otherArchives>
    </mailingList>
  </mailingLists>

  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/LOG4J2</url>
  </issueManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.6</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-changes-plugin</artifactId>
          <version>2.12.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>2.12.1</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>jira-report</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
          <useJql>true</useJql>
          <filter>project = LOG4J2 AND component = Boot AND status in (Resolved, Closed)</filter>
          <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
          <issueManagementSystems>
            <issueManagementSystem>JIRA</issueManagementSystem>
          </issueManagementSystems>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

</project>
