<?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_2.11</artifactId>
  <packaging>pom</packaging>
  <version>0.4.0-incubating</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>v0.4.0-incubating-RC4_2.11</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-client</module>
    <module>distributedlog-service</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>
          </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>
