<?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.8</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>
