<?xml version="1.0"?>
<!--
   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</groupId>
    <artifactId>apache</artifactId>
    <version>17</version>
  </parent>
  <groupId>org.apache.distributedlog</groupId>
  <artifactId>distributedlog</artifactId>
  <packaging>pom</packaging>
  <version>0.6.0-SNAPSHOT</version>
  <name>Apache DistributedLog :: Parent</name>
  <description>
    Apache DistributedLog provides a high performance replicated log service.
  </description>
  <url>http://bookkeeper.apache.org/distributedlog</url>
  <inceptionYear>2016</inceptionYear>
  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <scm>
    <connection>scm:git:https://github.com/apache/distributedlog.git</connection>
    <developerConnection>scm:git:https://github.com/apache/distributedlog.git</developerConnection>
    <url>https://github.com/apache/distributedlog</url>
    <tag>HEAD</tag>
  </scm>
  <issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/DL</url>
  </issueManagement>
  <mailingLists>
    <mailingList>
      <name>DistributedLog User</name>
      <subscribe>distributedlog-user-subscribe@bookkeeper.apache.org</subscribe>
      <unsubscribe>distributedlog-user-unsubscribe@bookkeeper.apache.org</unsubscribe>
      <post>distributedlog-user@bookkeeper.apache.org</post>
      <archive>http://www.mail-archive.com/distributedlog-user@bookkeeper.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>DistributedLog Dev</name>
      <subscribe>distributedlog-dev-subscribe@bookkeeper.apache.org</subscribe>
      <unsubscribe>distributedlog-dev-unsubscribe@bookkeeper.apache.org</unsubscribe>
      <post>distributedlog-dev@bookkeeper.apache.org</post>
      <archive>http://www.mail-archive.com/distributedlog-dev@bookkeeper.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>DistributedLog Commits</name>
      <subscribe>distributedlog-commits-subscribe@bookkeeper.apache.org</subscribe>
      <unsubscribe>distributedlog-commits-unsubscribe@bookkeeper.apache.org</unsubscribe>
      <post>distributedlog-commits@bookkeeper.apache.org</post>
      <archive>http://www.mail-archive.com/distributedlog-commits@bookkeeper.apache.org</archive>
    </mailingList>
  </mailingLists>
  <developers>
    <developer>
      <name>The Apache DistributedLog Team</name>
      <email>distributedlog-dev@bookkeeper.apache.org</email>
      <url>http://bookkeeper.apache.org/distributedlog</url>
      <organization>Apache Software Foundation</organization>
      <organizationUrl>http://www.apache.org</organizationUrl>
    </developer>
  </developers>
  <modules>
    <module>distributedlog-build-tools</module>
    <module>distributedlog-common</module>
    <module>distributedlog-protocol</module>
    <module>distributedlog-core</module>
    <module>distributedlog-io</module>
    <module>distributedlog-proxy-protocol</module>
    <module>distributedlog-proxy-client</module>
    <module>distributedlog-proxy-server</module>
    <module>distributedlog-benchmark</module>
    <module>distributedlog-tutorials</module>
    <module>distributedlog-core-twitter</module>
    <module>tests</module>
    <module>distributedlog-dist</module>
  </modules>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- dependencies -->
    <bookkeeper.version>4.7.0-SNAPSHOT</bookkeeper.version>
    <codahale.metrics.version>3.0.1</codahale.metrics.version>
    <commons-cli.version>1.1</commons-cli.version>
    <commons-codec.version>1.6</commons-codec.version>
    <commons-lang.version>2.6</commons-lang.version>
    <commons-lang3.version>3.3.2</commons-lang3.version>
    <curator.version>4.0.0</curator.version>
    <finagle.version>6.34.0</finagle.version>
    <freebuilder.version>1.12.3</freebuilder.version>
    <guava.version>20.0</guava.version>
    <jetty.version>9.3.11.v20160721</jetty.version>
    <jmh.version>1.19</jmh.version>
    <jmock.version>2.8.2</jmock.version>
    <junit.version>4.8.1</junit.version>
    <libthrift.version>0.5.0-1</libthrift.version>
    <lombok.version>1.16.16</lombok.version>
    <lz4.version>1.3.0</lz4.version>
    <mockito.version>1.9.5</mockito.version>
    <netty.version>4.1.12.Final</netty.version>
    <scrooge.version>4.6.0</scrooge.version>
    <slf4j.version>1.6.4</slf4j.version>
    <prometheus.version>0.0.21</prometheus.version>
    <stats-util.version>0.0.58</stats-util.version>
    <zookeeper.version>3.5.3-beta</zookeeper.version>
    <!-- plugin dependencies -->
    <apache-rat-plugin.version>0.12</apache-rat-plugin.version>
    <cobertura-maven-plugin.version>2.7</cobertura-maven-plugin.version>
    <coveralls-maven-plugin.version>4.1.0</coveralls-maven-plugin.version>
    <findbugs-maven-plugin.version>3.0.3</findbugs-maven-plugin.version>
    <puppycrawl.checkstyle.version>6.19</puppycrawl.checkstyle.version>
    <maven-assembly-plugin.version>2.2.1</maven-assembly-plugin.version>
    <maven-checkstyle-plugin.version>2.17</maven-checkstyle-plugin.version>
    <maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
    <maven-deploy-plugin.version>2.7</maven-deploy-plugin.version>
    <maven-jar-plugin.version>2.2</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>2.8</maven-javadoc-plugin.version>
    <maven-shade-plugin.version>2.4.3</maven-shade-plugin.version>
    <maven-source-plugin.version>2.2.1</maven-source-plugin.version>
    <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
    <scrooge-maven-plugin.version>3.17.0</scrooge-maven-plugin.version>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${maven-javadoc-plugin.version}</version>
        <configuration>
          <!-- Avoid for missing javadoc comments to be marked as errors -->
          <additionalparam>-Xdoclint:none -notimestamp</additionalparam>
          <groups>
            <group>
              <title>Core Library</title>
              <packages>org.apache.distributedlog:org.apache.distributedlog.annotations:org.apache.distributedlog.callback:org.apache.distributedlog.exceptions:org.apache.distributedlog.feature:org.apache.distributedlog.io:org.apache.distributedlog.lock:org.apache.distributedlog.logsegment:org.apache.distributedlog.metadata:org.apache.distributedlog.namespace:org.apache.distributedlog.net:org.apache.distributedlog.stats:org.apache.distributedlog.api.subscription</packages>
            </group>
            <group>
              <title>Proxy Client</title>
              <packages>org.apache.distributedlog.client*:org.apache.distributedlog.service*</packages>
            </group>
          </groups>
          <excludePackageNames>
            org.apache.distributedlog.acl:org.apache.distributedlog.admin:org.apache.distributedlog.auditor:org.apache.distributedlog.basic:org.apache.distributedlog.benchmark*:org.apache.distributedlog.bk:org.apache.distributedlog.ownership:org.apache.distributedlog.proxy:org.apache.distributedlog.resolver:org.apache.distributedlog.service.*:org.apache.distributedlog.config:org.apache.distributedlog.function:org.apache.distributedlog.impl*:org.apache.distributedlog.injector:org.apache.distributedlog.kafka:org.apache.distributedlog.limiter:org.apache.distributedlog.mapreduce:org.apache.distributedlog.messaging:org.apache.distributedlog.common.rate:org.apache.distributedlog.readahead:org.apache.distributedlog.selector:org.apache.distributedlog.stats:org.apache.distributedlog.thrift*:org.apache.distributedlog.tools:org.apache.distributedlog.util:org.apache.distributedlog.zk:org.apache.bookkeeper.client:org.apache.bookkeeper.stats
          </excludePackageNames>
        </configuration>
        <executions>
          <execution>
            <id>aggregate</id>
            <goals>
              <goal>aggregate</goal>
            </goals>
            <phase>site</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>${maven-assembly-plugin.version}</version>
        <configuration>
          <tarLongFileMode>gnu</tarLongFileMode>
          <descriptors>
            <descriptor>src/assemble/src.xml</descriptor>
          </descriptors>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>${findbugs-maven-plugin.version}</version>
        <configuration>
          <excludeFilterFile>${session.executionRootDirectory}/distributedlog-build-tools/src/main/resources/distributedlog/findbugsExclude.xml</excludeFilterFile>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>${maven-source-plugin.version}</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
        <configuration>
          <redirectTestOutputToFile>true</redirectTestOutputToFile>
          <argLine>-Xmx3G -Djava.net.preferIPv4Stack=true -XX:MaxDirectMemorySize=2G -Dio.netty.leakDetection.level=PARANOID</argLine>
          <forkMode>always</forkMode>
          <forkedProcessTimeoutInSeconds>1800</forkedProcessTimeoutInSeconds>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>${apache-rat-plugin.version}</version>
        <configuration>
          <excludes>
            <exclude>ChangeLog</exclude>
            <exclude>CONFIG.ini</exclude>
            <exclude>GROUPS</exclude>
            <exclude>OWNERS</exclude>
            <exclude>dist/**/*</exclude>
            <exclude>docs/**/*</exclude>
            <exclude>scripts/dev/reviewers</exclude>
            <exclude>website/**/*</exclude>
            <exclude>**/*.md</exclude>
            <exclude>**/apidocs/*</exclude>
            <exclude>**/dependency-reduced-pom.xml</exclude>
            <exclude>**/org/apache/distributedlog/thrift/*</exclude>
            <exclude>**/logs/*.log</exclude>
            <exclude>**/target/**/*</exclude>
            <!-- Git -->
            <exclude>.git/**/*</exclude>
            <exclude>.github/**/*</exclude>
            <exclude>.gitignore</exclude>
            <exclude>docker/.gitignore</exclude>
            <exclude>.idea/**/*</exclude>
            <!-- Intellij -->
            <exclude>**/*.iml</exclude>
            <exclude>**/*.iws</exclude>
            <exclude>**/*.ipr</exclude>
            <!-- SVN -->
            <exclude>**/.svn/**/*</exclude>
            <!-- Maven -->
            <exclude>.repository/**</exclude>
            <!-- Grafana -->
            <exclude>docker/grafana/dashboards/*.json</exclude>
          </excludes>
          <consoleOutput>true</consoleOutput>
        </configuration>
      </plugin>
      <!-- Report jacoco coverage to coveralls.io -->
      <plugin>
        <groupId>org.eluder.coveralls</groupId>
        <artifactId>coveralls-maven-plugin</artifactId>
        <version>${coveralls-maven-plugin.version}</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${cobertura-maven-plugin.version}</version>
        <configuration>
          <formats>
            <format>html</format>
            <format>xml</format>
          </formats>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
