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

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.datasketches</groupId>
  <artifactId>datasketches-memory</artifactId>
  <version>2.2.1</version>
  <packaging>pom</packaging>

  <name>${project.artifactId}</name>
  <description>High-performance native memory access.</description>
  <url>https://datasketches.apache.org/</url>
  <inceptionYear>2015</inceptionYear>

  <mailingLists>
    <mailingList>
      <name>DataSketches Developers</name>
      <subscribe>dev-subscribe@datasketches.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@datasketches.apache.org</unsubscribe>
      <post>dev@datasketches.apache.org</post>
      <archive>https://mail-archives.apache.org/mod_mbox/datasketches-dev</archive>
    </mailingList>
    <mailingList>
      <name>sketches-user</name>
      <archive>https://groups.google.com/forum/#!forum/sketches-user</archive>
      <subscribe>mailto:sketches-user%2Bsubscribe@googlegroups.com</subscribe>
      <unsubscribe>mailto:sketches-user%2Bunsubscribe@googlegroups.com</unsubscribe>
      <post>mailto:sketches-user@googlegroups.com</post>
    </mailingList>
  </mailingLists>

  <scm>
    <connection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/apache/${project.artifactId}.git</developerConnection>
    <url>https://github.com/apache/${project.artifactId}</url>
    <tag>HEAD</tag>
  </scm>

  <issueManagement>
    <!-- <system>jira</system> --> 
    <!-- <url>https://issues.apache.org/jira/browse/DATASKETCHES</url> -->
    <system>GitHub</system>
    <url>https://github.com/apache/${project.artifactId}/issues</url>
  </issueManagement>

  <developers>
    <developer>
      <name>The Apache DataSketches Team</name>
      <email>dev@datasketches.apache.org</email>
      <url>https://datasketches.apache.org</url>
      <organization>Apache Software Foundation</organization>
      <organizationUrl>http://www.apache.org</organizationUrl>
    </developer>
  </developers>

  <properties>
    <protobuf-java.version>4.0.0-rc-1</protobuf-java.version>
    <!-- Used for UTF8 testing -->
    <zero-allocation-hashing.version>0.16</zero-allocation-hashing.version>

    <!-- Test -->
    <testng.version>7.5.1</testng.version>

    <!-- System-wide properties -->
    <maven.version>3.6.3</maven.version>
    <java.version>8</java.version>
    <jdk-toolchain.version>8</jdk-toolchain.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <argLine>-Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8</argLine>
    <charset.encoding>UTF-8</charset.encoding>
    <project.build.sourceEncoding>${charset.encoding}</project.build.sourceEncoding>
    <project.build.resourceEncoding>${charset.encoding}</project.build.resourceEncoding>
    <project.reporting.outputEncoding>${charset.encoding}</project.reporting.outputEncoding>

    <!-- org.codehaus plugins -->
    <versions-maven-plugin.version>2.16.2</versions-maven-plugin.version>
    <exec-maven-plugin.version>3.2.0</exec-maven-plugin.version>

    <!--  Maven Plugins -->
    <maven-assembly-plugin.version>3.7.1</maven-assembly-plugin.version>
    <maven-compiler-plugin.version>3.13.0</maven-compiler-plugin.version>
    <maven-deploy-plugin.version>3.1.2</maven-deploy-plugin.version>
    <maven-enforcer-plugin.version>3.4.1</maven-enforcer-plugin.version>
    <maven-gpg-plugin.version>3.2.3</maven-gpg-plugin.version>
    <maven-jar-plugin.version>3.4.1</maven-jar-plugin.version>
    <maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
    <maven-release-plugin.version>3.0.1</maven-release-plugin.version>
    <maven-remote-resources-plugin.version>3.2.0</maven-remote-resources-plugin.version>
    <maven-source-plugin.version>3.3.1</maven-source-plugin.version>
    <maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version> <!-- for surefire, failsafe and surefire-report -->
    <maven-toolchains-plugin.version>3.2.0</maven-toolchains-plugin.version>
    <maven-install-plugin.version>3.0.0-M1</maven-install-plugin.version>
    <!-- Apache Plugins -->
    <apache-rat-plugin.version>0.16.1</apache-rat-plugin.version>
    <!-- org.jacoco Maven Plugins -->
    <jacoco-maven-plugin.version>0.8.12</jacoco-maven-plugin.version>
    <!-- org.eluder Maven Plugins -->
    <coveralls-repo-token></coveralls-repo-token>
    <coveralls-maven-plugin.version>4.3.0</coveralls-maven-plugin.version>
    <!-- other -->
    <lifecycle-mapping.version>1.0.0</lifecycle-mapping.version>
    <git-commit-id-plugin.version>4.9.10</git-commit-id-plugin.version>
    <exec-maven-plugin.version>3.3.0</exec-maven-plugin.version>
    <maven.deploy.skip>true</maven.deploy.skip>
    <maven.install.skip>true</maven.install.skip>
    <maven.javadoc.skip>true</maven.javadoc.skip>
  </properties>

  <repositories>
    <repository>
      <id>apache.snapshots</id>
      <name>Apache Snapshot Repository</name>
      <url>https://repository.apache.org/content/groups/snapshots/org/apache/datasketches/</url>
      <releases>
        <enabled>false</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>apache</id>
      <name>Apache Releases Repository</name>
      <url>https://repository.apache.org/content/repositories/releases/org/apache/datasketches/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <!-- Used for UTF8 testing -->
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf-java.version}</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <!-- Used for xxHash testing -->
        <groupId>net.openhft</groupId>
        <artifactId>zero-allocation-hashing</artifactId>
        <version>${zero-allocation-hashing.version}</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>${versions-maven-plugin.version}</version>
        </plugin>

        <plugin>
          <!-- We want to deploy the artifacts to a staging location for perusal -->
          <!-- Apache Parent pom: apache-release profile -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>${maven-deploy-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>${maven-release-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${maven-jar-plugin.version}</version>
          <executions>
            <execution>
              <id>default-jar</id>
              <phase>package</phase>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
            <execution>
              <id>default-test-jar</id>
              <phase>package</phase>
              <goals>
                <goal>test-jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
          <configuration>
            <docfilessubdirs>true</docfilessubdirs>
            <doclint>none</doclint>
            <jdkToolchain>
              <version>${jdk-toolchain.version}</version>
            </jdkToolchain>
            <excludePackageNames>org.apache.datasketches.memory.internal</excludePackageNames>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <phase>package</phase>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>${maven-enforcer-plugin.version}</version>
          <executions>
            <execution>
              <id>enforce-banned-dependencies</id>
              <goals>
                <goal>enforce</goal>
              </goals>
              <configuration>
                <rules>
                  <requireJavaVersion>
                    <version>[8,9),[11,12)</version>
                  </requireJavaVersion>
                  <requireMavenVersion>
                    <version>[${maven.version},)</version>
                  </requireMavenVersion>
                  <bannedDependencies>
                    <excludes>
                      <!--LGPL licensed library-->
                      <exclude>com.google.code.findbugs:annotations</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
                <fail>true</fail>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <version>${apache-rat-plugin.version}</version>
          <executions>
            <execution>
              <phase>verify</phase>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <outputDirectory>${project.basedir}/rat</outputDirectory>
            <consoleOutput>true</consoleOutput>
            <useDefaultExcludes>true</useDefaultExcludes>
            <excludes>
              <exclude>**/*.yaml</exclude>
              <exclude>**/*.yml</exclude>
              <exclude>**/toolchains.xml</exclude>
              <exclude>**/.*</exclude>
              <exclude>**/.clover/**/*</exclude>
              <exclude>**/test/resources/**/*.txt</exclude>
              <exclude>**/test-output/**/*</exclude>
              <exclude>**/img/**/*.png</exclude>
              <exclude>**/git.properties</exclude>
              <exclude>**/scripts/assets/LoremIpsum.txt</exclude>
              <exclude>LICENSE</exclude>
              <exclude>NOTICE</exclude>
            </excludes>
          </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>
              <phase>package</phase>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
            <execution>
              <id>attach-test-sources</id>
              <phase>package</phase>
              <goals>
                <goal>test-jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven-surefire-plugin.version}</version>
          <configuration>
            <trimStackTrace>false</trimStackTrace>
            <useManifestOnlyJar>false</useManifestOnlyJar>
            <redirectTestOutputToFile>true</redirectTestOutputToFile>
            <jdkToolchain>
              <version>${jdk-toolchain.version}</version>
            </jdkToolchain>
            <reportsDirectory>${project.build.directory}/test-output/${maven.build.timestamp}</reportsDirectory>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-toolchains-plugin</artifactId>
          <version>${maven-toolchains-plugin.version}</version>
          <configuration>
            <toolchains>
              <jdk>
                <version>[8,9),[11,12)</version>
              </jdk>
            </toolchains>
          </configuration>
          <executions>
            <execution>
              <goals>
                <goal>toolchain</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- Generates code coverage report from website. -->
          <groupId>org.jacoco</groupId>
          <artifactId>jacoco-maven-plugin</artifactId>
          <version>${jacoco-maven-plugin.version}</version>
          <executions>
            <execution>
              <id>default-prepare-agent</id>
              <goals>
                <goal>prepare-agent</goal>
              </goals>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- Submit code coverage report to Coveralls.io. -->
          <groupId>org.eluder.coveralls</groupId>
          <artifactId>coveralls-maven-plugin</artifactId>
          <version>${coveralls-maven-plugin.version}</version>
          <configuration>
            <!--suppress UnresolvedMavenProperty -->
            <repoToken>${coveralls-repo-token}</repoToken>
            <!--suppress UnresolvedMavenProperty -->
            <jacocoReports>${maven.multiModuleProjectDirectory}/datasketches-memory-java8/target/site/jacoco/jacoco.xml</jacocoReports>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven-compiler-plugin.version}</version>
          <configuration>
            <jdkToolchain>
              <version>${jdk-toolchain.version}</version>
            </jdkToolchain>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>${exec-maven-plugin.version}</version>
        </plugin>

      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-deploy-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.eluder.coveralls</groupId>
        <artifactId>coveralls-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <!-- Disable source release assembly for 'apache-release' profile.
             This is performed from a script outside Maven
    -->
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven-assembly-plugin.version}</version>
            <executions>
              <execution>
                <id>source-release-assembly</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>only-eclipse</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-remote-resources-plugin</artifactId>
              <version>${maven-remote-resources-plugin.version}</version>
              <executions>
                <execution>
                  <id>process-resource-bundles</id>
                  <phase>none</phase>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

  </profiles>

  <!-- This Maven project is divided into an aggregator project (the root), that manages a group of submodules that
       inherit configuration from this root module.
       A multi-module project is used to target different version-specific features of the Java language APIs.
       Furthermore, it is a structure that is supported in most IDEs allowing minimal disruption to developers that
       contribute to this project -->
  <modules>
    <module>datasketches-memory-java8</module>
    <module>datasketches-memory-java11</module>
  </modules>

</project>
