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

  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>30</version>
  </parent>
  <packaging>pom</packaging>

  <name>Phoenix Adapters Layers</name>
  <modules>
    <module>phoenix-ddb-rest</module>
    <module>phoenix-ddb-utils</module>
    <module>phoenix-ddb-assembly</module>
    <module>coverage-report</module>
  </modules>

  <groupId>org.apache.phoenixadapters</groupId>
  <artifactId>phoenix-adapters</artifactId>
  <version>1.0.0-SNAPSHOT</version>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <compileSource>1.8</compileSource>
    <maven.compiler.source>${compileSource}</maven.compiler.source>
    <maven.compiler.target>${compileSource}</maven.compiler.target>
    <aws.sdk.version>2.30.22</aws.sdk.version>
    <phoenix.version>5.3.2</phoenix.version>
    <junit.version>4.13.1</junit.version>
    <jetty.version>9.4.53.v20231009</jetty.version>
    <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
    <hbase.version>2.5.14-hadoop3</hbase.version>
    <hbase.compat.version>2.5.4</hbase.compat.version>
    <hbase-thirdparty.version>4.1.13</hbase-thirdparty.version>
    <reload4j.version>1.2.19</reload4j.version>
    <log4j2.version>2.18.0</log4j2.version>
    <zookeeper.version>3.8.4</zookeeper.version>
    <hadoop.version>3.3.6</hadoop.version>
    <mockito.version>4.11.0</mockito.version>
    <test.output.tofile>true</test.output.tofile>
    <numForkedIT>1</numForkedIT>
    <surefire.version>3.0.0-M6</surefire.version>
    <antlr4.version>4.9.3</antlr4.version>

    <!-- JVM version dependent JVM options for running tests. Keep mostly in sync with HBase/Phoenix -->
    <surefire.Xmx>2200m</surefire.Xmx>
    <surefire.Xms>1000m</surefire.Xms>

    <phoenix-surefire.argLine>-enableassertions -Xmx${surefire.Xmx} -Xms${surefire.Xms}
      -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true
      -Djava.awt.headless=true -Djdk.net.URLClassPath.disableClassPathURLCheck=true
      -Dorg.apache.hbase.thirdparty.io.netty.leakDetection.level=advanced
      -Dio.netty.eventLoopThreads=3 -Duser.timezone="America/Los_Angeles"
      -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./target/
      "-Djava.library.path=${hadoop.library.path}${path.separator}${java.library.path}"
    </phoenix-surefire.argLine>
    <phoenix-surefire.jdk8.tuning.flags>
        -XX:NewRatio=4 -XX:SurvivorRatio=8 -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC
        -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled
        -XX:+CMSScavengeBeforeRemark -XX:CMSInitiatingOccupancyFraction=68
    </phoenix-surefire.jdk8.tuning.flags>
    <phoenix-surefire.jdk11.flags>-Dorg.apache.hbase.thirdparty.io.netty.tryReflectionSetAccessible=true
      --add-modules jdk.unsupported
      --add-opens java.base/java.nio=ALL-UNNAMED
      --add-opens java.base/sun.nio.ch=ALL-UNNAMED
      --add-opens java.base/java.lang=ALL-UNNAMED
      --add-opens java.base/jdk.internal.ref=ALL-UNNAMED
      --add-opens java.base/java.lang.reflect=ALL-UNNAMED
      --add-opens java.base/java.util=ALL-UNNAMED
      --add-opens java.base/java.util.concurrent=ALL-UNNAMED
      --add-exports java.base/jdk.internal.misc=ALL-UNNAMED
      --add-exports java.security.jgss/sun.security.krb5=ALL-UNNAMED</phoenix-surefire.jdk11.flags>
    <phoenix-surefire.jdk11.tuning.flags/>
    <phoenix-surefire.jdk17.flags>--add-opens java.base/jdk.internal.util.random=ALL-UNNAMED</phoenix-surefire.jdk17.flags>
    <phoenix-surefire.jdk17.tuning.flags></phoenix-surefire.jdk17.tuning.flags>
    <!-- Needed for SystemExitRule compatibility (not currently used) -->
    <phoenix-surefire.jdk21.flags>-Djava.security.manager=allow</phoenix-surefire.jdk21.flags>
    <!-- Surefire argLine defaults for Linux + JDK8 -->
    <argLine>${phoenix-surefire.argLine} ${phoenix-surefire.jdk8.tuning.flags} @{jacocoArgLine}</argLine>
    <!-- Empty argument when code coverage is deactivated -->
    <jacocoArgLine/>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${surefire.version}</version>
          <configuration>
            <redirectTestOutputToFile>${test.output.tofile}</redirectTestOutputToFile>
            <failIfNoTests>false</failIfNoTests>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>${surefire.version}</version>
          <!-- Common settings for all executions -->
          <configuration>
            <encoding>UTF-8</encoding>
            <forkCount>${numForkedIT}</forkCount>
            <runOrder>alphabetical</runOrder>
            <redirectTestOutputToFile>${test.output.tofile}</redirectTestOutputToFile>
            <forkedProcessExitTimeoutInSeconds>180</forkedProcessExitTimeoutInSeconds>
            <shutdown>exit</shutdown>
            <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
            <trimStackTrace>false</trimStackTrace>
            <!-- https://www.orpiske.net/2021/04/test-woes-with-maven-failsafe-3-0-0-m5 -->
            <useModulePath>false</useModulePath>
            <forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
            <systemPropertyVariables>
<!--              <java.io.tmpdir>${test.tmp.dir}</java.io.tmpdir>-->
            </systemPropertyVariables>
          </configuration>
          <executions>
            <execution>
              <id>TestExecution</id>
              <configuration>
                <reuseForks>false</reuseForks>
              </configuration>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <profiles>
    <!--
      Apache RAT (Release Audit Tool) license-header check.
      Bound to the package phase in this release profile, matching Apache Phoenix.
      Run explicitly with: mvn -P release apache-rat:check
      or as part of a release build: mvn -P release package
    -->
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.rat</groupId>
            <artifactId>apache-rat-plugin</artifactId>
            <configuration>
              <excludes>
                <!-- ASF / VCS / IDE / tooling metadata -->
                <exclude>.asf.yaml</exclude>
                <exclude>.gitignore</exclude>
                <exclude>.dockerignore</exclude>
                <exclude>.java-version</exclude>
                <exclude>.github/**</exclude>
                <exclude>.vscode/**</exclude>
                <exclude>.cursor/**</exclude>
                <exclude>.mvn/**</exclude>
                <exclude>dev-support/code-formatter/idea_formatter.xml</exclude>
                <!-- Documentation, data and images (no header possible/needed) -->
                <exclude>**/*.md</exclude>
                <exclude>**/*.properties</exclude>
                <exclude>src/images/**</exclude>
                <!-- Config data files without headers -->
                <exclude>conf/**</exclude>
                <exclude>docker/conf/**</exclude>
                <!-- Generated / build / runtime output -->
                <exclude>**/target/**</exclude>
                <exclude>**/logs/**</exclude>
                <exclude>**/dependency-reduced-pom.xml</exclude>
              </excludes>
            </configuration>
            <executions>
              <execution>
                <id>rat-check</id>
                <phase>package</phase>
                <goals>
                  <goal>check</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>coverage</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.7</version>
            <executions>
              <execution>
                <id>prepare-agent</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
                <configuration>
                  <propertyName>jacocoArgLine</propertyName>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>build-with-jdk8</id>
      <activation>
        <jdk>[1.8,11)</jdk>
      </activation>
    </profile>
    <!-- See PHOENIX-7901 for Java 11+ support -->
    <profile>
      <id>build-with-jdk11</id>
      <activation>
        <jdk>[11,17)</jdk>
      </activation>
      <properties>
        <argLine>${phoenix-surefire.jdk11.flags}
          ${phoenix-surefire.jdk11.tuning.flags}
          ${phoenix-surefire.argLine}
          @{jacocoArgLine}</argLine>
      </properties>
    </profile>
    <profile>
      <id>build-with-jdk17</id>
      <activation>
        <jdk>[17,21)</jdk>
      </activation>
      <properties>
        <argLine>${phoenix-surefire.jdk11.flags}
          ${phoenix-surefire.jdk17.flags}
          ${phoenix-surefire.jdk17.tuning.flags}
          ${phoenix-surefire.argLine}
          @{jacocoArgLine}</argLine>
      </properties>
    </profile>
    <profile>
      <id>build-with-jdk21</id>
      <activation>
        <jdk>[21,)</jdk>
      </activation>
      <properties>
        <argLine>${phoenix-surefire.jdk11.flags}
          ${phoenix-surefire.jdk17.flags}
          ${phoenix-surefire.jdk21.flags}
          ${phoenix-surefire.jdk17.tuning.flags}
          ${phoenix-surefire.argLine}
          @{jacocoArgLine}</argLine>
      </properties>
    </profile>
  </profiles>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.phoenixadapters</groupId>
        <artifactId>phoenix-ddb-utils</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.phoenixadapters</groupId>
        <artifactId>phoenix-ddb-rest</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>${antlr4.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

</project>
