<?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.5.0-incubating-SNAPSHOT</version>
  <name>Apache DistributedLog :: Parent</name>
  <description>
    Apache DistributedLog provides a high performance replicated log service.
  </description>
  <url>http://distributedlog.incubator.apache.org</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://git-wip-us.apache.org/repos/asf/incubator-distributedlog.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/incubator-distributedlog.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=incubator-distributedlog.git;a=summary</url>
    <tag>release-0.5.0-incubating</tag>
  </scm>
  <issueManagement>
    <system>jira</system>
    <url>https://issues.apache.org/jira/browse/DL</url>
  </issueManagement>
  <mailingLists>
    <mailingList>
      <name>DistributedLog User</name>
      <subscribe>user-subscribe@distributedlog.incubator.apache.org</subscribe>
      <unsubscribe>user-unsubscribe@distributedlog.incubator.apache.org</unsubscribe>
      <post>user@distributedlog.incubator.apache.org</post>
      <archive>http://www.mail-archive.com/user@distributedlog.incubator.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>DistributedLog Dev</name>
      <subscribe>dev-subscribe@distributedlog.incubator.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@distributedlog.incubator.apache.org</unsubscribe>
      <post>dev@distributedlog.incubator.apache.org</post>
      <archive>http://www.mail-archive.com/dev@distributedlog.incubator.apache.org</archive>
    </mailingList>
    <mailingList>
      <name>DistributedLog Commits</name>
      <subscribe>commits-subscribe@distributedlog.incubator.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@distributedlog.incubator.apache.org</unsubscribe>
      <post>commits@distributedlog.incubator.apache.org</post>
      <archive>http://www.mail-archive.com/commits@distributedlog.incubator.apache.org</archive>
    </mailingList>
  </mailingLists>
  <developers>
    <developer>
      <name>The Apache DistributedLog Team</name>
      <email>dev@distributedlog.incubator.apache.org</email>
      <url>http://distributedlog.incubator.apache.org</url>
      <organization>Apache Software Foundation</organization>
      <organizationUrl>http://www.apache.org</organizationUrl>
    </developer>
  </developers>
  <modules>
    <module>distributedlog-build-tools</module>
    <module>distributedlog-protocol</module>
    <module>distributedlog-core</module>
    <module>distributedlog-proxy-protocol</module>
    <module>distributedlog-proxy-client</module>
    <module>distributedlog-proxy-server</module>
    <module>distributedlog-benchmark</module>
    <module>distributedlog-tutorials</module>
  </modules>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- dependencies -->
    <bookkeeper.version>4.3.7-TWTTR-OSS</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>3.2.1</curator.version>
    <finagle.version>6.34.0</finagle.version>
    <guava.version>20.0</guava.version>
    <jetty.version>8.1.19.v20160209</jetty.version>
    <jmock.version>2.8.2</jmock.version>
    <junit.version>4.8.1</junit.version>
    <libthrift.version>0.5.0-1</libthrift.version>
    <lz4.version>1.2.0</lz4.version>
    <mockito.version>1.9.5</mockito.version>
    <scrooge.version>4.6.0</scrooge.version>
    <slf4j.version>1.6.4</slf4j.version>
    <stats-util.version>0.0.58</stats-util.version>
    <zookeeper.version>3.5.1-alpha</zookeeper.version>
    <!-- plugin dependencies -->
    <apache-rat-plugin.version>0.7</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-jar-plugin.version>2.2</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>2.8</maven-javadoc-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</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.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.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>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven-compiler-plugin.version}</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</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</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>docs/**/*</exclude>
            <exclude>website/**/*</exclude>
            <exclude>.git/**/*</exclude>
            <exclude>.gitignore</exclude>
            <exclude>.idea/**/*</exclude>
            <exclude>dist/**/*</exclude>
            <exclude>**/.svn/**/*</exclude>
            <exclude>ChangeLog</exclude>
            <exclude>**/README.md</exclude>
            <exclude>**/apidocs/*</exclude>
	    <exclude>GROUPS</exclude>
	    <exclude>OWNERS</exclude>
	    <exclude>CONFIG.ini</exclude>
            <exclude>**/**.md</exclude>
            <exclude>scripts/dev/reviewers</exclude>
            <exclude>src/main/resources/DISCLAIMER.bin.txt</exclude>            
            <exclude>**/dependency-reduced-pom.xml</exclude>
            <exclude>**/org/apache/distributedlog/thrift/*</exclude>
          </excludes>
        </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>
  <repositories>
    <repository>
      <id>bookkeeper-twitter-mvn-repo</id>
      <url>https://raw.github.com/twitter/bookkeeper/mvn-repo/${bookkeeper.version}</url>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>always</updatePolicy>
      </snapshots>
    </repository> 
    <repository>
      <id>twitter-repo</id>
      <name>Twitter Maven Repo</name>
      <url>http://maven.twttr.com</url>
    </repository>
  </repositories>
</project>
