<?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>

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>23</version>
  </parent>

  <groupId>org.apache.datasketches</groupId>
  <artifactId>datasketches-hive</artifactId>
  <version>1.2.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>${project.artifactId}</name>
  <description>Apache Hive adaptors for the DataSketches library.</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>
    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
    <datasketches-java.version>2.0.0</datasketches-java.version>
    <hive-exec.version>2.3.4</hive-exec.version>
    <hadoop-common.version>2.8.5</hadoop-common.version>
    <slf4j-simple.version>1.7.30</slf4j-simple.version>
    <!-- END:UNIQUE FOR THIS JAVA COMPONENT -->

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

    <!-- System-wide properties -->
    <maven.version>3.5.0</maven.version>
    <java.version>1.8</java.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 -->
    <!-- used for strict profile testing-->
    <plexus-compiler-javac-errorprone.version>2.8.5</plexus-compiler-javac-errorprone.version>
    <versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>

    <!--  Maven Plugins -->
    <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version> <!-- overrides parent -->
    <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version> <!-- overrides parent -->
    <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version> <!-- overrides parent -->
    <maven-enforcer-plugin.version>3.0.0-M2</maven-enforcer-plugin.version> <!-- overrides parent -->
    <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version> <!-- overrides parent -->
    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version> <!-- overrides parent -->
    <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version> <!-- overrides parent -->
    <maven-release-plugin.version>3.0.0-M1</maven-release-plugin.version> <!-- overrides parent -->
    <maven-remote-resources-plugin.version>[1.7.0,)</maven-remote-resources-plugin.version> <!-- overrides parent -->
    <maven-source-plugin.version>3.2.1</maven-source-plugin.version> <!-- overrides parent -->
    <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version> <!-- overrides parent -->
    <!-- Apache Plugins -->
    <apache-rat-plugin.version>0.13</apache-rat-plugin.version> <!-- overrides parent -->
    <!-- org.jacoco Maven Plugins -->
    <jacoco-maven-plugin.version>0.8.6</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>3.0.0</git-commit-id-plugin.version>
  </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>

  <dependencies>
    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
    <dependency>
      <groupId>org.apache.datasketches</groupId>
      <artifactId>datasketches-java</artifactId>
      <version>${datasketches-java.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hive</groupId>
      <artifactId>hive-exec</artifactId>
      <version>${hive-exec.version}</version>
      <scope>provided</scope>
      <exclusions>
        <exclusion>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>${hadoop-common.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
      </exclusions>
      <scope>provided</scope>
    </dependency> 
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>${slf4j-simple.version}</version>
    </dependency>
    <!-- END: UNIQUE FOR THIS JAVA COMPONENT -->

    <!-- Test Scope -->
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>${testng.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <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>
          <configuration>
            <updateReleaseInfo>true</updateReleaseInfo>
            <!-- see maven-install-plugin -->
          </configuration>
        </plugin>

        <plugin>
          <!-- Apache Parent pom, pluginManagement-->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>${maven-release-plugin.version}</version>
        </plugin>

        <plugin>
          <!-- Extends Apache Parent pom, pluginManagement-->
          <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>
          <!-- Extends Apache Parent pom, apache-release profile -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
          <configuration>
            <docfilessubdirs>true</docfilessubdirs>
          </configuration>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <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>${java.version}</version>
                  </requireJavaVersion>
                  <requireMavenVersion>
                    <version>${maven.version},</version>
                  </requireMavenVersion>
                  <bannedDependencies>
                    <excludes>
                      <!--LGPL licenced library-->
                      <exclude>com.google.code.findbugs:annotations</exclude>
                    </excludes>
                  </bannedDependencies>
                </rules>
                <fail>true</fail>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <plugin>
          <!-- Apache Parent pom, pluginManagement-->
          <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>
              <!-- rat uses .gitignore for excludes by default -->
              <exclude>**/*.yaml</exclude>
              <exclude>**/*.yml</exclude>
              <exclude>**/.*</exclude>
              <exclude>**/test/resources/**/*.txt</exclude>
              <exclude>LICENSE</exclude>
              <exclude>NOTICE</exclude>
            </excludes>
          </configuration>
        </plugin>

        <plugin>
          <!-- Extends Apache Parent pom, apache-release profile -->
          <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>
          <!-- Apache Parent pom, pluginManagement-->
          <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>
          </configuration>
        </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>
            <execution>
              <id>default-report</id>
              <goals>
                <goal>report</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>
            <repoToken>${coveralls-repo-token}</repoToken>
          </configuration>
        </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>
    <!-- Ignore nuisance warning from Apache parent plugin: 
          "maven-remote-resources-plugin (goal "process") is ignored by m2e".
          This also should fix the Maven warning that it can't find the lifecycle-mapping jar.
          This profile is only active when the property "m2e.version" is set, 
          which is the case when building in Eclipse with m2e.
          The ignore below tells m2eclipse to skip the execution.
    -->
    <profile>
      <id>m2e</id>
      <activation>
        <property>
          <name>m2e.version</name>
        </property>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.eclipse.m2e</groupId>
              <artifactId>lifecycle-mapping</artifactId>
              <version>${lifecycle-mapping.version}</version>
              <configuration>
                <lifecycleMappingMetadata>
                  <pluginExecutions>
                    <pluginExecution>
                      <pluginExecutionFilter>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-remote-resources-plugin</artifactId>
                        <versionRange>${maven-remote-resources-plugin.version}</versionRange>
                        <goals>
                          <goal>process</goal>
                        </goals>
                      </pluginExecutionFilter>
                      <action>
                        <ignore/>
                      </action>
                    </pluginExecution>
                  </pluginExecutions>
                </lifecycleMappingMetadata>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <profile>
      <id>strict</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>${maven-compiler-plugin.version}</version>
              <dependencies>
                <dependency>
                  <groupId>org.codehaus.plexus</groupId>
                  <artifactId>plexus-compiler-javac-errorprone</artifactId>
                  <version>${plexus-compiler-javac-errorprone.version}</version>
                </dependency>
              </dependencies>
              <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
                <compilerId>javac-with-errorprone</compilerId>
                <forceJavacCompilerUse>true</forceJavacCompilerUse>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>

    <!--  This profile is used to release signed jars to the Apache Nexus repository. 
          This must be executed from a git repository set at the proper Release branch (e.g., 1.1.X) 
          and at a Release Candidate tag (e.g., 1.1.0-RC1).
          The pom version in the release branch must be properly set to something like: "1.1.0".
          The pom version in the master would be set to something like: "1.2.0-SNAPSHOT".
          Test Command: mvn clean verify -Pnexus-jars -DskipTests=true
          Command: mvn clean deploy -Dnexus-jars
          Verify Command (from terminal): gpg -v &#45;&#45;verify $ASC $FILE # dashdashverify
    -->
    <profile>
      <id>nexus-jars</id>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>pl.project13.maven</groupId>
              <artifactId>git-commit-id-plugin</artifactId>
              <version>${git-commit-id-plugin.version}</version>
              <executions>
                <execution>
                  <goals>
                    <goal>revision</goal>
                  </goals>
                  <phase>initialize</phase>
                </execution>
              </executions>
              <configuration>
                <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
                <dateFormatTimeZone>UTC</dateFormatTimeZone>
                <verbose>false</verbose>
                <skipPoms>false</skipPoms>
                <format>json</format>
                <generateGitPropertiesFile>true</generateGitPropertiesFile>
                <generateGitPropertiesFilename>${project.build.directory}/git.properties</generateGitPropertiesFilename>
                <failOnNoGitDirectory>true</failOnNoGitDirectory>
                <failOnUnableToExtractRepoInfo>true</failOnUnableToExtractRepoInfo>
                <commitIdGenerationMode>full</commitIdGenerationMode>
                <includeOnlyProperties>
                  <includeProperty>git.branch</includeProperty>
                  <includeProperty>git.commit.id.full</includeProperty>
                  <includeProperty>git.commit.time</includeProperty>
                  <includeProperty>git.commit.user.email</includeProperty>
                  <includeProperty>git.tags</includeProperty>
                </includeOnlyProperties>
                <gitDescribe>
                  <skip>false</skip>
                  <always>true</always>
                  <abbrev>7</abbrev>
                  <dirty>-dirty</dirty>
                  <tags>true</tags>
                  <forceLongFormat>true</forceLongFormat>
                </gitDescribe>
              </configuration>
            </plugin>

            <!-- Extends Apache Parent pom, pluginManagement-->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>${maven-jar-plugin.version}</version>
              <executions>
                <execution>
                  <id>default-jar</id>
                  <goals>
                    <goal>jar</goal>
                  </goals>
                </execution>
                <execution>
                  <id>default-test-jar</id>
                  <goals>
                    <goal>test-jar</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <injectAllReactorProjects>true</injectAllReactorProjects>
                <archive>
                  <manifest>
                    <addDefaultEntries>false</addDefaultEntries>
                    <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
                    <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
                  </manifest>
                  <manifestEntries>
                    <Build-Jdk>${java.version} (${java.vendor} ${java.vm.version})</Build-Jdk>
                    <Build-OS>${os.name} ${os.arch} ${os.version}</Build-OS>
                    <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
                    <GroupId-ArtifactId>${project.groupId}:${project.artifactId}</GroupId-ArtifactId>
                    <git-branch>${git.branch}</git-branch>
                    <git-commit-id>${git.commit.id.full}</git-commit-id>
                    <git-commit-time>${git.commit.time}</git-commit-time>
                    <git-commit-user-email>${git.commit.user.email}</git-commit-user-email>
                    <git-commit-tag>${git.tags}</git-commit-tag>
                  </manifestEntries>
                </archive>
              </configuration>
            </plugin>

            <!-- We want to sign the artifacts, POM, and all attached artifacts -->
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-gpg-plugin</artifactId>
              <version>${maven-gpg-plugin.version}</version>
              <executions>
                <execution>
                  <id>sign-artifacts</id>
                  <phase>verify</phase>
                  <goals>
                    <goal>sign</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <gpgArguments>
                  <arg>--verbose</arg>
                  <!-- prints the algorithm used -->
                  <arg>--personal-digest-preferences=SHA512</arg>
                </gpgArguments>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>

        <plugins>
          <plugin>
            <groupId>pl.project13.maven</groupId>
            <artifactId>git-commit-id-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-gpg-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>
    <!-- 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>
  </profiles>
</project>
