blob: 32c68b835e94bcd25a73b1eb3c3c9b80ac88edc5 [file]
<?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>39</version>
<relativePath />
</parent>
<groupId>org.apache.pinot</groupId>
<artifactId>pinot</artifactId>
<version>1.6.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Pinot</name>
<description>A realtime distributed OLAP datastore</description>
<url>https://pinot.apache.org/</url>
<modules>
<module>pinot-bom</module>
<module>pinot-dependency-verifier</module>
<module>pinot-spi</module>
<module>pinot-segment-spi</module>
<module>pinot-broker</module>
<module>pinot-common</module>
<module>pinot-clients</module>
<module>pinot-server</module>
<module>pinot-core</module>
<module>pinot-materialized-view</module>
<module>pinot-controller</module>
<module>pinot-minion</module>
<module>pinot-plugins</module>
<module>pinot-tools</module>
<module>pinot-perf</module>
<module>pinot-integration-test-base</module>
<module>pinot-integration-tests</module>
<module>pinot-distribution</module>
<module>pinot-connectors</module>
<module>pinot-segment-local</module>
<module>pinot-compatibility-verifier</module>
<module>pinot-java11-client-verifier</module>
<module>pinot-query-planner-spi</module>
<module>pinot-query-planner</module>
<module>pinot-query-runtime</module>
<module>pinot-timeseries</module>
<module>pinot-udf-test</module>
<module>pinot-sql-ddl</module>
</modules>
<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>
<organization>
<name>Apache Software Foundation</name>
<url>http://www.apache.org</url>
</organization>
<mailingLists>
<mailingList>
<name>Dev Mailing List</name>
<post>dev@pinot.apache.org</post>
<subscribe>dev-subscribe@pinot.apache.org</subscribe>
<unsubscribe>dev-unsubscribe@pinot.apache.org</unsubscribe>
</mailingList>
<mailingList>
<name>User Mailing List</name>
<post>user@pinot.apache.org</post>
<subscribe>user-subscribe@pinot.apache.org</subscribe>
<unsubscribe>user-unsubscribe@pinot.apache.org</unsubscribe>
</mailingList>
<mailingList>
<name>Commits Mailing List</name>
<post>commits@pinot.apache.org</post>
<subscribe>commits-subscribe@pinot.apache.org</subscribe>
<unsubscribe>commits-unsubscribe@pinot.apache.org</unsubscribe>
</mailingList>
</mailingLists>
<scm>
<developerConnection>scm:git:git@github.com:apache/pinot.git</developerConnection>
<tag>HEAD</tag>
</scm>
<!-- Apache project inception year for generating correct NOTICE file for jar bundle. -->
<inceptionYear>2018</inceptionYear>
<properties>
<pinot.root>${basedir}</pinot.root>
<build.profile.id>dev</build.profile.id>
<!--
Pinot services build against Java 25 by default. SPI/client modules consumed
by external JVMs (pinot-spi, pinot-segment-spi, pinot-timeseries-spi,
pinot-common, pinot-java-client, pinot-jdbc-client) hard-code Java 11
bytecode in their own maven-compiler-plugin configuration.
-->
<jdk.version>25</jdk.version>
<!-- OS classifier for platform-specific protoc/grpc binaries, overridden by OS detection profiles -->
<os.detected.classifier>linux-x86_64</os.detected.classifier>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Setting maven.compiler flags to the jdk version. These are used by maven plugins like maven-javadoc-plugin -->
<maven.compiler.release>${jdk.version}</maven.compiler.release>
<maven.compiler.source>${jdk.version}</maven.compiler.source>
<maven.compiler.target>${jdk.version}</maven.compiler.target>
<!-- Configuration for unit/integration tests
Property for running integration tests with profiles
at the command line, where you do:
mvn integration-test -P integration-test
See also: the surefire plugin section and the profiles section.-->
<!-- Only unit tests are run by default. -->
<skip.integration.tests>true</skip.integration.tests>
<skip.unit.tests>false</skip.unit.tests>
<!--
Per-fork heap for unit tests. Defaults to 4g to preserve historical behavior. When
running multiple parallel forks (unit.test.fork.count > 1) CI lowers this so that
N forks * heap + the Maven JVM stay within the runner's memory.
-->
<unit.test.fork.heap>4g</unit.test.fork.heap>
<!-- Sets the VM argument line used when unit tests are run. -->
<argLine>-Xms${unit.test.fork.heap} -Xmx${unit.test.fork.heap}</argLine>
<SKIP_INTEGRATION_TESTS>true</SKIP_INTEGRATION_TESTS>
<!--
Number of parallel JVM forks used by surefire for unit tests. Defaults to 1 to
preserve the historical single-fork behavior for local/dev builds. CI overrides
this (e.g. -Dunit.test.fork.count=3) to run test classes in parallel forks and
shorten the unit-test phase. Must be a positive integer.
-->
<unit.test.fork.count>1</unit.test.fork.count>
<!--
Number of times surefire retries a failing unit test before failing the build. Defaults to
0 (no retry) so local/dev behavior is unchanged; CI raises it to absorb a few pre-existing
load-sensitive flaky tests exposed by parallel forks. A test passing only on retry is
reported as flaky, not silently passed.
-->
<unit.test.rerun.count>0</unit.test.rerun.count>
<!--
Suffix for the JaCoCo exec file name. Empty by default so coverage writes the
historical target/jacoco.exec (used by report / report-aggregate everywhere). The
unit-test script sets this to -${surefire.forkNumber} so parallel forks each write a
distinct jacoco-<n>.exec instead of appending to one shared file.
-->
<jacoco.exec.suffix></jacoco.exec.suffix>
<!-- Checkstyle violation prop.-->
<checkstyle.violation.severity>warning</checkstyle.violation.severity>
<checkstyle.fail.on.violation>true</checkstyle.fail.on.violation>
<!-- Configuration for Packaging -->
<shade.prefix>org.apache.pinot.shaded</shade.prefix>
<shade.phase.prop>none</shade.phase.prop>
<!-- Keep these enabled by default; fastdev can disable them for incremental builds. -->
<pinot.skip.buildnumber>false</pinot.skip.buildnumber>
<package.info.phase>generate-sources</package.info.phase>
<pinot.skip.remote.resources>false</pinot.skip.remote.resources>
<arrow.version>19.0.0</arrow.version>
<avro.version>1.12.2</avro.version>
<bson.version>5.11.0</bson.version>
<parquet.version>1.18.0</parquet.version>
<orc.version>1.9.9</orc.version>
<hive.version>4.2.1</hive.version>
<helix.version>2.0.1</helix.version>
<zkclient.version>0.11</zkclient.version>
<jackson.version>2.22.2</jackson.version>
<fory.version>1.7.1</fory.version>
<zookeeper.version>3.9.5</zookeeper.version>
<async-http-client.version>3.0.13</async-http-client.version>
<jersey.version>2.48</jersey.version>
<hk2.version>2.6.1</hk2.version>
<swagger.version>1.6.16</swagger.version>
<swagger-ui.version>5.32.14</swagger-ui.version>
<hadoop.version>3.4.3</hadoop.version>
<jsonpath.version>2.10.0</jsonpath.version>
<jsonsmart.version>2.6.0</jsonsmart.version>
<quartz.version>2.5.2</quartz.version>
<calcite.version>1.42.0</calcite.version>
<joou.version>0.9.5</joou.version>
<immutables.version>2.12.2</immutables.version>
<lucene.version>9.12.0</lucene.version>
<reflections.version>0.10.2</reflections.version>
<dynatrace.hash4j.version>0.30.0</dynatrace.hash4j.version>
<yammer-metrics.version>2.2.0</yammer-metrics.version>
<!-- helix-core, spark-core use libraries from io.dropwizard.metrics -->
<dropwizard-metrics.version>4.2.40</dropwizard-metrics.version>
<snappy-java.version>1.1.10.8</snappy-java.version>
<zstd-jni.version>1.5.7-16</zstd-jni.version>
<lz4-java.version>1.11.2</lz4-java.version>
<libthrift.version>0.24.0</libthrift.version>
<log4j.version>2.26.1</log4j.version>
<slf4j.version>2.0.18</slf4j.version>
<netty.version>4.1.137.Final</netty.version>
<reactivestreams.version>1.0.4</reactivestreams.version>
<jts.version>1.20.0</jts.version>
<h3.version>4.5.0</h3.version>
<ipaddress.version>5.6.2</ipaddress.version>
<openhft.chronicle-bom.version>2.27ea100</openhft.chronicle-bom.version>
<jmh.version>1.37</jmh.version>
<audienceannotations.version>0.15.1</audienceannotations.version>
<clp-ffi.version>0.4.7</clp-ffi.version>
<stax2-api.version>4.3.0</stax2-api.version>
<aws.sdk.version>2.54.9</aws.sdk.version>
<azure.sdk.version>1.3.7</azure.sdk.version>
<azure.msal4j.version>1.26.0</azure.msal4j.version>
<joda-time.version>2.14.3</joda-time.version>
<janino.version>3.1.12</janino.version>
<ayza.version>10.0.7</ayza.version>
<jbcrypt.version>0.4</jbcrypt.version>
<scala-xml.version>2.4.0</scala-xml.version>
<plexus-classworlds.version>2.12.1</plexus-classworlds.version>
<protobuf-dynamic.version>1.0.1</protobuf-dynamic.version>
<localstack-utils.version>0.2.23</localstack-utils.version>
<checker-qual.version>4.2.2</checker-qual.version>
<groovy.version>3.0.25</groovy.version>
<xml-apis.version>2.0.2</xml-apis.version>
<roaring-bitmap.version>1.6.20</roaring-bitmap.version>
<prometheus.jmx-exporter.version>1.6.0</prometheus.jmx-exporter.version>
<prometheus.metrics.version>1.8.0</prometheus.metrics.version>
<fastutil.version>8.5.19</fastutil.version>
<disruptor.version>4.0.0</disruptor.version>
<snakeyaml.version>2.7</snakeyaml.version>
<hadoop-shaded-protobuf_3_25.version>1.5.0</hadoop-shaded-protobuf_3_25.version>
<clearspring-stream-lib.version>2.9.8</clearspring-stream-lib.version>
<datasketches-java.version>9.0.0</datasketches-java.version>
<t-digest.version>3.3</t-digest.version>
<picocli.version>4.7.7</picocli.version>
<tyrus-standalone-client.version>2.2.2</tyrus-standalone-client.version>
<jopt-simple.version>5.0.4</jopt-simple.version>
<spark3.version>3.5.9</spark3.version>
<kafka3.version>3.9.2</kafka3.version>
<kafka4.version>4.2.0</kafka4.version>
<confluent.version>8.2.0</confluent.version>
<pulsar.version>4.0.13</pulsar.version>
<flink.version>2.3.0</flink.version>
<!-- Apache Commons Libraries -->
<commons-lang3.version>3.20.0</commons-lang3.version>
<commons-collections4.version>4.6.0</commons-collections4.version>
<commons-text.version>1.15.0</commons-text.version>
<commons-compress.version>1.28.0</commons-compress.version>
<commons-math3.version>3.6.1</commons-math3.version>
<commons-csv.version>1.14.1</commons-csv.version>
<commons-configuration2.version>2.15.1</commons-configuration2.version>
<commons-beanutils.version>1.11.0</commons-beanutils.version>
<commons-io.version>2.22.0</commons-io.version>
<commons-codec.version>1.22.1</commons-codec.version>
<commons-cli.version>1.11.0</commons-cli.version>
<commons-net.version>3.13.0</commons-net.version>
<commons-validator.version>1.11.0</commons-validator.version>
<!-- Java EE Libraries -->
<!-- Include both newer jakarta ones and older javax ones, but not migrate to Jakarta EE yet -->
<!-- DO NOT upgrade these versions unless we are migrating to Jakarta EE -->
<jakarta.servlet-api.version>4.0.4</jakarta.servlet-api.version> <!-- DO NOT UPGRADE -->
<javax.servlet-api.version>4.0.1</javax.servlet-api.version> <!-- DO NOT UPGRADE -->
<jakarta.annotation-api.version>1.3.5</jakarta.annotation-api.version> <!-- DO NOT UPGRADE -->
<javax.annotation-api.version>1.3.2</javax.annotation-api.version> <!-- DO NOT UPGRADE -->
<jakarta.validation-api.version>2.0.2</jakarta.validation-api.version> <!-- DO NOT UPGRADE -->
<javax.validation-api.version>2.0.1.Final</javax.validation-api.version><!-- DO NOT UPGRADE -->
<jakarta.xml.bind-api.version>2.3.3</jakarta.xml.bind-api.version> <!-- DO NOT UPGRADE -->
<javax.jaxb-api.version>2.3.1</javax.jaxb-api.version> <!-- DO NOT UPGRADE -->
<jakarta.ws.rs-api.version>2.1.6</jakarta.ws.rs-api.version> <!-- DO NOT UPGRADE -->
<javax.ws.rs-api.version>2.1.1</javax.ws.rs-api.version> <!-- DO NOT UPGRADE -->
<jakarta.activation-api.version>1.2.2</jakarta.activation-api.version> <!-- DO NOT UPGRADE -->
<!-- HTTP Components Libraries -->
<httpclient.version>4.5.14</httpclient.version>
<httpcore.version>4.4.16</httpcore.version>
<httpclient5.version>5.6.4</httpclient5.version>
<httpcore5.version>5.4.3</httpcore5.version>
<!-- Google Libraries -->
<protobuf.version>4.36.1</protobuf.version>
<grpc.version>1.83.1</grpc.version>
<google.cloud.libraries.version>26.87.0</google.cloud.libraries.version>
<opentelemetry.gcp.resources.version>1.60.0-alpha</opentelemetry.gcp.resources.version>
<google.auto-service.version>1.1.1</google.auto-service.version>
<google.re2j.version>1.8</google.re2j.version>
<google.errorprone.version>2.50.0</google.errorprone.version>
<google.j2objc.version>3.1</google.j2objc.version>
<google.jsr305.version>3.0.2</google.jsr305.version>
<!-- Configuration for Scala -->
<scala-2.12.version>2.12.20</scala-2.12.version>
<scala-2.13.version>2.13.18</scala-2.13.version>
<scala.version>${scala-2.13.version}</scala.version>
<scala.compat.version>2.13</scala.compat.version>
<!-- For Dependency Verifier module -->
<enforcer-api.version>3.6.3</enforcer-api.version>
<maven.version>3.9.16</maven.version>
<jdom2.version>2.0.6.1</jdom2.version>
<plexus-utils.version>4.1.0</plexus-utils.version>
<plexus-xml.version>3.1.0</plexus-xml.version>
<!-- For maven-antrun-plugin -->
<fmpp.version>0.9.16</fmpp.version>
<!-- Solve conflicts and vulnerabilities -->
<kerby.version>2.1.2</kerby.version>
<jline.version>4.4.1</jline.version>
<wildfly.version>2.0.1</wildfly.version>
<jettison.version>1.5.7</jettison.version>
<nimbus-jose-jwt.version>10.9.1</nimbus-jose-jwt.version>
<dnsjava.version>3.6.5</dnsjava.version>
<eclipse.jetty.version>9.4.58.v20250814</eclipse.jetty.version>
<woodstox.version>7.2.2</woodstox.version>
<curator.version>5.9.0</curator.version>
<javassist.version>3.33.0-GA</javassist.version>
<bouncycastle.version>1.85</bouncycastle.version>
<aircompressor.version>2.0.3</aircompressor.version>
<jna.version>5.19.1</jna.version>
<jnr-ffi.version>2.3.1</jnr-ffi.version>
<jnr-constants.version>0.11.0</jnr-constants.version>
<asm.version>9.10.1</asm.version>
<paranamer.version>2.8.3</paranamer.version>
<kotlin.stdlib.version>2.4.10</kotlin.stdlib.version>
<jetbrains.annotations.version>26.1.0</jetbrains.annotations.version>
<okio.version>3.18.1</okio.version>
<kryo.version>2.24.0</kryo.version>
<objenesis.version>3.6</objenesis.version>
<chill.version>0.10.0</chill.version>
<HikariCP-java7.version>2.4.13</HikariCP-java7.version>
<ivy.version>2.6.0</ivy.version>
<c3p0.version>0.14.1</c3p0.version>
<mchange-commons-java.version>0.6.1</mchange-commons-java.version>
<animal-sniffer-annotations.version>1.27</animal-sniffer-annotations.version>
<!-- Test Libraries -->
<testng.version>7.12.0</testng.version>
<junit-jupiter-api.version>5.14.4</junit-jupiter-api.version>
<mockito-core.version>5.23.0</mockito-core.version>
<equalsverifier.version>3.19.4</equalsverifier.version>
<testcontainers.version>2.0.5</testcontainers.version>
<h2.version>2.4.240</h2.version>
<jnr-posix.version>3.2.2</jnr-posix.version>
<scalatest.version>3.2.20</scalatest.version>
<assertj.version>3.27.7</assertj.version>
<archiver.compress>true</archiver.compress>
<archiver.recompressZippedFiles>true</archiver.recompressZippedFiles>
<japicmp.skip>true</japicmp.skip>
</properties>
<profiles>
<profile>
<id>dependency-verifier</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>org.apache.pinot</groupId>
<artifactId>pinot-dependency-verifier</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>default-cli</id> <!-- magic id, used when calling enforcer:enforce -->
<goals>
<goal>enforce</goal>
</goals>
<phase>validate</phase>
<configuration>
<rules>
<pinotCustomDependencyVersionRule implementation="org.apache.pinot.verifier.PinotCustomDependencyVersionRule">
<skipModules>pinot-plugins,pinot-connectors,pinot-integration-tests,
pinot-tools,contrib,pinot-dependency-verifier</skipModules>
</pinotCustomDependencyVersionRule>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>pinot-fastdev</id>
<!-- disable verifying plugins that can be easily fixed after a successful implementation -->
<properties>
<checkstyle.skip>true</checkstyle.skip>
<!-- This plugin slows down the builds, most likely caused by an issue in the deprecated org.apache.maven.shared.utils.io.DirectoryScanner -->
<license.skip>true</license.skip>
<!-- This plugin slows down the builds, most likely caused by an issue in the deprecated org.apache.maven.shared.utils.io.DirectoryScanner -->
<rat.skip>true</rat.skip>
<spotless.check.skip>true</spotless.check.skip>
<shade.phase.prop>none</shade.phase.prop>
<archiver.compress>false</archiver.compress>
<archiver.recompressZippedFiles>false</archiver.recompressZippedFiles>
<!-- Avoid rewriting metadata/generated sources on every local build. -->
<pinot.skip.buildnumber>true</pinot.skip.buildnumber>
<package.info.phase>none</package.info.phase>
<pinot.skip.remote.resources>true</pinot.skip.remote.resources>
</properties>
</profile>
<!-- OS detection profiles: set os.detected.classifier for protoc/grpc binary resolution -->
<profile>
<id>os-detect-linux-aarch64</id>
<activation>
<os>
<name>linux</name>
<arch>aarch64</arch>
</os>
</activation>
<properties>
<os.detected.classifier>linux-aarch_64</os.detected.classifier>
</properties>
</profile>
<profile>
<id>os-detect-osx-x86_64</id>
<activation>
<os>
<family>mac</family>
<arch>x86_64</arch>
</os>
</activation>
<properties>
<os.detected.classifier>osx-x86_64</os.detected.classifier>
</properties>
</profile>
<profile>
<id>os-detect-osx-aarch64</id>
<activation>
<os>
<family>mac</family>
<arch>aarch64</arch>
</os>
</activation>
<properties>
<os.detected.classifier>osx-aarch_64</os.detected.classifier>
</properties>
</profile>
<profile>
<id>os-detect-windows-x86_64</id>
<activation>
<os>
<family>windows</family>
<arch>amd64</arch>
</os>
</activation>
<properties>
<os.detected.classifier>windows-x86_64</os.detected.classifier>
</properties>
</profile>
<!--build profile for linux-aarch64. We exclude certain tests as they use runtime JNI bindings not supported for linux-aarch64-->
<profile>
<id>linux-aarch64</id>
<activation>
<!--os info is taken from the output of mvn -version-->
<os>
<name>linux</name>
<arch>aarch64</arch>
</os>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<systemPropertyVariables>
<os.arch>aarch64</os.arch>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!--build profile for osx-aarch64. We exclude certain tests as they use runtime JNI bindings not supported for linux-aarch64-->
<profile>
<id>osx-aarch64</id>
<activation>
<!--os info is taken from the output of mvn -version-->
<os>
<name>mac os x</name>
<arch>aarch64</arch>
</os>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<excludes>
</excludes>
<systemPropertyVariables>
<os.arch>aarch64</os.arch>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!-- Apple Silicon Mac with protoc-gen-grpc-java at /usr/local (fallback path) -->
<profile>
<id>macos-arm64-protobuf-homebrew-fallback</id>
<activation>
<os>
<family>mac</family>
<arch>aarch64</arch>
</os>
<file>
<exists>/usr/local/bin/protoc-gen-grpc-java</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<configuration>
<pluginExecutable>/usr/local/bin/protoc-gen-grpc-java</pluginExecutable>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!-- Apple Silicon Mac with Homebrew for protoc (wins over fallback when both exist) -->
<profile>
<id>macos-arm64-protobuf-homebrew</id>
<activation>
<os>
<family>mac</family>
<arch>aarch64</arch>
</os>
<file>
<exists>/opt/homebrew/bin/protoc-gen-grpc-java</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<configuration>
<pluginExecutable>/opt/homebrew/bin/protoc-gen-grpc-java</pluginExecutable>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>github-actions</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<!-- Inherits unit.test.fork.heap from the global properties (overridable via
-Dunit.test.fork.heap); adds the log4j2 config used under github-actions. -->
<argLine>-Xms${unit.test.fork.heap} -Xmx${unit.test.fork.heap} -Dlog4j2.configurationFile=log4j2.xml</argLine>
</properties>
</profile>
<profile>
<id>codecoverage</id>
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<append>true</append>
<includes>
<include>org/apache/pinot/**/*</include>
</includes>
<!-- Exec file suffix defaults to empty, keeping the historical
target/jacoco.exec used by report / report-aggregate everywhere (incl.
the integration lanes). The unit-test script sets jacoco.exec.suffix to
-${surefire.forkNumber} so parallel forks (forkCount > 1) each write a
distinct jacoco-<n>.exec instead of appending to one shared file; it
then aggregates with a matching jacoco-*.exec glob. -->
<destFile>${project.build.directory}/jacoco${jacoco.exec.suffix}.exec</destFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Disable source release assembly for 'apache-release' profile. -->
<profile>
<id>apache-release</id>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>source-release-assembly</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>scala-2.12</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<scala.version>${scala-2.12.version}</scala.version>
<scala.compat.version>2.12</scala.compat.version>
</properties>
</profile>
</profiles>
<dependencyManagement>
<dependencies>
<!--
Pinot Modules — managed via pinot-bom (see pinot-bom/pom.xml).
When adding a new subproject (module) to this build, declare its
dependencyManagement entry in pinot-bom/pom.xml, NOT here. The BOM
is imported below and makes the version available to all modules in
this reactor as well as to external consumers who import the BOM.
Projects that set this root pom as their <parent> and use a different
version must import pinot-bom explicitly at their desired Pinot version
in their own <dependencyManagement> (before any inherited entries).
Maven's first-import-wins rule ensures that explicit child import takes
precedence and the inherited ${project.version} import is never resolved.
-->
<dependency>
<groupId>org.apache.pinot</groupId>
<artifactId>pinot-bom</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Arrow dependencies for Broker GRPC ResultTable Serde protocol -->
<!-- arrow bom -->
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>arrow-bom</artifactId>
<version>${arrow.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Explicit pin: arrow-bom declares arrow-vector twice (with empty classifier), causing Maven 4 warnings -->
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>arrow-vector</artifactId>
<version>${arrow.version}</version>
</dependency>
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker-qual</artifactId>
<version>${checker-qual.version}</version>
</dependency>
<!-- Groovy 3.x publishes groovy-all as a POM aggregator that pulls in every sub-module.
We exclude groovy-testng/groovy-test-junit5/groovy-test because their transitive TestNG and
JUnit jars collide with Surefire's TestNG fork classpath and cause NoClassDefFoundError on
unrelated test classes. Everything else (groovy core, templates, json, xml, sql, jmx, swing,
ant, cli-picocli, datetime, nio, jsr223, console, etc.) is kept to preserve the runtime
Groovy stdlib surface user transform/filter scripts may rely on from the old 2.4.21 fat jar. -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-testng</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-test-junit5</artifactId>
</exclusion>
<exclusion>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-test</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>${xml-apis.version}</version>
</dependency>
<dependency>
<groupId>org.roaringbitmap</groupId>
<artifactId>RoaringBitmap</artifactId>
<version>${roaring-bitmap.version}</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- JMX exporter (collector module is published to Maven Central; the javaagent JAR is not since 1.1.0) -->
<dependency>
<groupId>io.prometheus.jmx</groupId>
<artifactId>collector</artifactId>
<version>${prometheus.jmx-exporter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>prometheus-metrics-exporter-httpserver</artifactId>
<version>${prometheus.metrics.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>prometheus-metrics-core</artifactId>
<version>${prometheus.metrics.version}</version>
<scope>test</scope>
</dependency>
<!--
Pin prometheus-metrics-model to the same version as prometheus-metrics-core. The JMX
exporter (io.prometheus.jmx:collector) brings in an older prometheus-metrics-model
transitively, and a model/core version skew causes IllegalArgumentException at metric
registration time (the older model still rejects names ending in '_total', which the
newer core's Counter builder now passes through unstripped).
-->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>prometheus-metrics-model</artifactId>
<version>${prometheus.metrics.version}</version>
<scope>test</scope>
</dependency>
<!-- netty BOM -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-bom</artifactId>
<version>${netty.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.reactivestreams</groupId>
<artifactId>reactive-streams</artifactId>
<version>${reactivestreams.version}</version>
</dependency>
<dependency>
<groupId>org.apache.yetus</groupId>
<artifactId>audience-annotations</artifactId>
<version>${audienceannotations.version}</version>
</dependency>
<dependency>
<groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId>
<version>${fastutil.version}</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>${avro.version}</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>${bson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-mapred</artifactId>
<version>${avro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.parquet</groupId>
<artifactId>parquet-avro</artifactId>
<version>${parquet.version}</version>
</dependency>
<dependency>
<groupId>org.apache.parquet</groupId>
<artifactId>parquet-column</artifactId>
<version>${parquet.version}</version>
</dependency>
<dependency>
<groupId>org.apache.parquet</groupId>
<artifactId>parquet-hadoop</artifactId>
<version>${parquet.version}</version>
</dependency>
<dependency>
<groupId>org.apache.orc</groupId>
<artifactId>orc-core</artifactId>
<version>${orc.version}</version>
</dependency>
<dependency>
<groupId>org.apache.orc</groupId>
<artifactId>orc-mapreduce</artifactId>
<version>${orc.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-storage-api</artifactId>
<version>${hive.version}</version>
</dependency>
<dependency>
<groupId>org.xerial.snappy</groupId>
<artifactId>snappy-java</artifactId>
<version>${snappy-java.version}</version>
</dependency>
<dependency>
<groupId>com.github.luben</groupId>
<artifactId>zstd-jni</artifactId>
<version>${zstd-jni.version}</version>
</dependency>
<dependency>
<groupId>at.yawk.lz4</groupId>
<artifactId>lz4-java</artifactId>
<version>${lz4-java.version}</version>
</dependency>
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>${libthrift.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
<dependency>
<groupId>org.apache.helix</groupId>
<artifactId>helix-core</artifactId>
<version>${helix.version}</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>${jmh.version}</version>
</dependency>
<!-- log4j2 related dependencies -->
<!-- log4j bom -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>${log4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- We don't use slf4j but slf4j2. Including it here to support old libraries -->
<!-- slf4j bom -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-bom</artifactId>
<version>${slf4j.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>${disruptor.version}</version>
</dependency>
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>${async-http-client.version}</version>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>${snakeyaml.version}</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Apache Commons Libraries -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${commons-collections4.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>${commons-compress.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>${commons-math3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>${commons-csv.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>${commons-configuration2.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>${commons-cli.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>${commons-validator.version}</version>
</dependency>
<!-- Java EE Libraries -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>${jakarta.servlet-api.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet-api.version}</version>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>${jakarta.annotation-api.version}</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>${javax.annotation-api.version}</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>${jakarta.validation-api.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation-api.version}</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>${jakarta.xml.bind-api.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${javax.jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>${jakarta.ws.rs-api.version}</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>${javax.ws.rs-api.version}</version>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>${jakarta.activation-api.version}</version>
</dependency>
<!-- HTTP Components Libraries -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>${httpcore.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>${httpclient5.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5</artifactId>
<version>${httpcore5.version}</version>
</dependency>
<!-- Google Libraries -->
<!-- protobuf-bom -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-bom</artifactId>
<version>${protobuf.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- grpc-bom -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-bom</artifactId>
<version>${grpc.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- libraries-bom should be imported after protobuf-bom and grpc-bom to honor their versions -->
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>${google.cloud.libraries.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Explicit pins: libraries-bom transitively imports protobuf-bom:4.33.2, conflicting with our 4.34.0 -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>${protobuf.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-kotlin</artifactId>
<version>${protobuf.version}</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.contrib</groupId>
<artifactId>opentelemetry-gcp-resources</artifactId>
<version>${opentelemetry.gcp.resources.version}</version>
</dependency>
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service-annotations</artifactId>
<version>${google.auto-service.version}</version>
<optional>true</optional> <!-- This is only needed at compilation time as an annotation processor -->
</dependency>
<dependency>
<groupId>com.google.re2j</groupId>
<artifactId>re2j</artifactId>
<version>${google.re2j.version}</version>
</dependency>
<!-- Solve the dependency converge issue between guava and calcite-core -->
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_annotations</artifactId>
<version>${google.errorprone.version}</version>
</dependency>
<!-- Solve the dependency converge issue between guava and protobuf -->
<dependency>
<groupId>com.google.j2objc</groupId>
<artifactId>j2objc-annotations</artifactId>
<version>${google.j2objc.version}</version>
</dependency>
<!-- Solve the dependency converge issue between google and flink libraries -->
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>${google.jsr305.version}</version>
</dependency>
<!-- Hadoop -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
</exclusion>
<!-- Hadoop pulls org.eclipse.jetty (and org.eclipse.jetty.websocket) for its embedded
HttpServer2 web UIs, which downstream Pinot modules never start. These leak into
runtime distributions and carry CVE-2026-2332 (jetty-http request smuggling). Exclude
centrally here so every module depending on Hadoop is covered by default. Note: this
does NOT strip the relocated Jetty bundled inside the hadoop-client-runtime uber-jar
(org.apache.hadoop.shaded.org.eclipse.jetty); that is handled by the maven-shade-plugin
filter further down in this pom. -->
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
</exclusion>
<!-- See hadoop-common above: drop embedded-Jetty web UI transitives (CVE-2026-2332). -->
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
</exclusion>
<!-- See hadoop-common above: drop embedded-Jetty web UI transitives (CVE-2026-2332).
For hadoop-client the compile-scoped leak path is
hadoop-yarn-client -> websocket-client -> jetty-client -> jetty-http. -->
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>${hadoop.version}</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</exclusion>
<exclusion>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
</exclusion>
<!-- See hadoop-common above: drop embedded-Jetty web UI transitives (CVE-2026-2332). -->
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs-client</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
<exclusions>
<!-- See hadoop-common above: drop embedded-Jetty web UI transitives (CVE-2026-2332). -->
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client-runtime</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client-api</artifactId>
<version>${hadoop.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop.thirdparty</groupId>
<artifactId>hadoop-shaded-protobuf_3_25</artifactId>
<version>${hadoop-shaded-protobuf_3_25.version}</version>
</dependency>
<!-- Metrics -->
<dependency>
<groupId>com.yammer.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>${yammer-metrics.version}</version>
</dependency>
<!-- dropwizard metrics bom -->
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-bom</artifactId>
<version>${dropwizard-metrics.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.clearspring.analytics</groupId>
<artifactId>stream</artifactId>
<version>${clearspring-stream-lib.version}</version>
</dependency>
<dependency>
<groupId>org.apache.datasketches</groupId>
<artifactId>datasketches-java</artifactId>
<version>${datasketches-java.version}</version>
</dependency>
<dependency>
<groupId>com.dynatrace.hash4j</groupId>
<artifactId>hash4j</artifactId>
<version>${dynatrace.hash4j.version}</version>
</dependency>
<dependency>
<groupId>com.tdunning</groupId>
<artifactId>t-digest</artifactId>
<version>${t-digest.version}</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>${jsonpath.version}</version>
</dependency>
<dependency>
<groupId>org.apache.fory</groupId>
<artifactId>fory-json</artifactId>
<version>${fory.version}</version>
</dependency>
<dependency>
<groupId>net.minidev</groupId>
<artifactId>json-smart</artifactId>
<version>${jsonsmart.version}</version>
</dependency>
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-core</artifactId>
<version>${calcite.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.calcite.avatica</groupId>
<artifactId>avatica-metrics</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</exclusion>
<exclusion>
<groupId>com.yahoo.datasketches</groupId>
<artifactId>sketches-core</artifactId>
</exclusion>
<exclusion>
<groupId>net.hydromatic</groupId>
<artifactId>aggdesigner-algorithm</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.calcite</groupId>
<artifactId>calcite-babel</artifactId>
<version>${calcite.version}</version>
</dependency>
<!-- Required by Calcite -->
<dependency>
<groupId>org.immutables</groupId>
<artifactId>value-annotations</artifactId>
<version>${immutables.version}</version>
</dependency>
<!-- Pin joou-java-6 (unsigned integer types library, a Calcite dependency since 1.41 via CALCITE-1466) to
resolve a dependency convergence conflict: calcite-core and calcite-linq4j (1.42) pull 0.9.5 while the
transitive avatica-core 1.28.0 pulls 0.9.4. -->
<dependency>
<groupId>org.jooq</groupId>
<artifactId>joou-java-6</artifactId>
<version>${joou.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>${janino.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>${janino.version}</version>
</dependency>
<!-- Jersey bom -->
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2-locator</artifactId>
<version>${hk2.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2-metadata-generator</artifactId>
<version>${hk2.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey2-jaxrs</artifactId>
<version>${swagger.version}</version>
</dependency>
<!-- Also used by pulsar-common -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>swagger-ui</artifactId>
<version>${swagger-ui.version}</version>
</dependency>
<dependency>
<groupId>info.picocli</groupId>
<artifactId>picocli</artifactId>
<version>${picocli.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus.bundles</groupId>
<artifactId>tyrus-standalone-client</artifactId>
<version>${tyrus-standalone-client.version}</version>
</dependency>
<dependency>
<groupId>net.sf.jopt-simple</groupId>
<artifactId>jopt-simple</artifactId>
<version>${jopt-simple.version}</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>${reflections.version}</version>
</dependency>
<!-- geo dependencies -->
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>${jts.version}</version>
</dependency>
<dependency>
<groupId>com.uber</groupId>
<artifactId>h3</artifactId>
<version>${h3.version}</version>
</dependency>
<dependency>
<groupId>com.github.seancfoley</groupId>
<artifactId>ipaddress</artifactId>
<version>${ipaddress.version}</version>
</dependency>
<!-- chronicle bom -->
<dependency>
<groupId>net.openhft</groupId>
<artifactId>chronicle-bom</artifactId>
<version>${openhft.chronicle-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.yscope.clp</groupId>
<artifactId>clp-ffi</artifactId>
<version>${clp-ffi.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>stax2-api</artifactId>
<version>${stax2-api.version}</version>
</dependency>
<!-- ayza bom -->
<dependency>
<groupId>io.github.hakky54</groupId>
<artifactId>ayza-bom</artifactId>
<version>${ayza.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>${jbcrypt.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-xml_${scala.compat.version}</artifactId>
<version>${scala-xml.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-classworlds</artifactId>
<version>${plexus-classworlds.version}</version>
</dependency>
<dependency>
<groupId>com.github.os72</groupId>
<artifactId>protobuf-dynamic</artifactId>
<version>${protobuf-dynamic.version}</version>
</dependency>
<dependency>
<groupId>cloud.localstack</groupId>
<artifactId>localstack-utils</artifactId>
<version>${localstack-utils.version}</version>
</dependency>
<!-- AWS SDK -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>${aws.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Azure SDK -->
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>${azure.sdk.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>${azure.msal4j.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${kafka3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_${scala.compat.version}</artifactId>
<version>${kafka3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_${scala.compat.version}</artifactId>
<version>${kafka3.version}</version>
<classifier>test</classifier>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>${kafka3.version}</version>
<classifier>test</classifier>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-server-common</artifactId>
<version>${kafka3.version}</version>
<classifier>test</classifier>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-schema-registry-client</artifactId>
<version>${confluent.version}</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-avro-serializer</artifactId>
<version>${confluent.version}</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-protobuf-serializer</artifactId>
<version>${confluent.version}</version>
</dependency>
<dependency>
<groupId>io.confluent</groupId>
<artifactId>kafka-json-schema-serializer</artifactId>
<version>${confluent.version}</version>
</dependency>
<!-- pulsar bom -->
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-bom</artifactId>
<version>${pulsar.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Flink -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients</artifactId>
<version>${flink.version}</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>${flink.version}</version>
</dependency>
<!-- Spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.compat.version}</artifactId>
<version>${spark3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.compat.version}</artifactId>
<version>${spark3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-launcher_${scala.compat.version}</artifactId>
<version>${spark3.version}</version>
</dependency>
<!-- Lucene -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-backward-codecs</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analysis-common</artifactId>
<version>${lucene.version}</version>
</dependency>
<!-- For Dependency Verifier module -->
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-api</artifactId>
<version>${enforcer-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${maven.version}</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
<version>${jdom2.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>${plexus-utils.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-xml</artifactId>
<version>${plexus-xml.version}</version>
</dependency>
<!-- Solve conflicts and vulnerabilities -->
<!-- Dependencies in Hadoop libraries -->
<dependency>
<groupId>org.apache.kerby</groupId>
<artifactId>kerby-bom</artifactId>
<version>${kerby.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jline</groupId>
<artifactId>jline</artifactId>
<version>${jline.version}</version>
</dependency>
<dependency>
<groupId>org.wildfly.common</groupId>
<artifactId>wildfly-common</artifactId>
<version>${wildfly.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>${jettison.version}</version>
</dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>${nimbus-jose-jwt.version}</version>
</dependency>
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>${dnsjava.version}</version>
</dependency>
<!-- Eclipse jetty dependencies in Hadoop/Spark/Pulsar -->
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-client</artifactId>
<version>${eclipse.jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${eclipse.jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${eclipse.jetty.version}</version>
</dependency>
<!-- jetty bom -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<version>${eclipse.jetty.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Used by Hadoop and Jackson -->
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>${woodstox.version}</version>
</dependency>
<!-- Used by Hadoop and Spark -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
<!-- Used by reflections and jersey-hk2 -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>${javassist.version}</version>
</dependency>
<!-- Bouncy Castle libraries are used by Hadoop/Kafka/Pulsar -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcutil-jdk18on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<!-- Used by ORC, Parquet and Pulsar -->
<dependency>
<groupId>io.airlift</groupId>
<artifactId>aircompressor</artifactId>
<version>${aircompressor.version}</version>
</dependency>
<!-- Native access libraries -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>${jna.version}</version>
</dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-ffi</artifactId>
<version>${jnr-ffi.version}</version>
</dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-constants</artifactId>
<version>${jnr-constants.version}</version>
</dependency>
<!-- Used by jnr-ffi and json-smart -->
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>${asm.version}</version>
</dependency>
<!-- Used by Jackson and Spark -->
<dependency>
<groupId>com.thoughtworks.paranamer</groupId>
<artifactId>paranamer</artifactId>
<version>${paranamer.version}</version>
</dependency>
<!-- Dependencies in Confluent Kafka libraries -->
<!-- kotlin bom -->
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-bom</artifactId>
<version>${kotlin.stdlib.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- okio bom -->
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio-bom</artifactId>
<version>${okio.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Used in async-http-client and orc-core -->
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>${jetbrains.annotations.version}</version>
</dependency>
<!-- Used in Spark and Flink -->
<dependency>
<groupId>com.esotericsoftware.kryo</groupId>
<artifactId>kryo</artifactId>
<version>${kryo.version}</version>
</dependency>
<dependency>
<groupId>org.objenesis</groupId>
<artifactId>objenesis</artifactId>
<version>${objenesis.version}</version>
</dependency>
<dependency>
<groupId>com.twitter</groupId>
<artifactId>chill-java</artifactId>
<version>${chill.version}</version>
</dependency>
<dependency>
<groupId>com.twitter</groupId>
<artifactId>chill_2.11</artifactId>
<version>${chill.version}</version>
</dependency>
<dependency>
<groupId>com.twitter</groupId>
<artifactId>chill_${scala.compat.version}</artifactId>
<version>${chill.version}</version>
</dependency>
<!-- Used by Spark and quartz -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP-java7</artifactId>
<version>${HikariCP-java7.version}</version>
</dependency>
<!-- Used by Spark -->
<dependency>
<groupId>org.apache.ivy</groupId>
<artifactId>ivy</artifactId>
<version>${ivy.version}</version>
</dependency>
<!-- Used by quartz -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
<version>${mchange-commons-java.version}</version>
</dependency>
<!-- Used by grpc-netty-shade and google-cloud-storage -->
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>animal-sniffer-annotations</artifactId>
<version>${animal-sniffer-annotations.version}</version>
</dependency>
<!-- Test Libraries -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit-jupiter-api.version}</version>
<scope>test</scope>
</dependency>
<!-- mockito bom -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-bom</artifactId>
<version>${mockito-core.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>nl.jqno.equalsverifier</groupId>
<artifactId>equalsverifier</artifactId>
<version>${equalsverifier.version}</version>
<scope>test</scope>
</dependency>
<!-- testcontainers bom -->
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-bom</artifactId>
<version>${testcontainers.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.jnr</groupId>
<artifactId>jnr-posix</artifactId>
<version>${jnr-posix.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_${scala.compat.version}</artifactId>
<version>${scalatest.version}</version>
<scope>test</scope>
</dependency>
<!-- assertj bom -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-bom</artifactId>
<version>${assertj.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<defaultGoal>clean install</defaultGoal>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<java>
<includes>
<include>src/main/java/**/*.java</include>
<include>src/test/java/**/*.java</include>
</includes>
<importOrder>
<order>,\#</order>
</importOrder>
<removeUnusedImports />
</java>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>2.1.0</version>
<configuration>
<binFileExtensions>
<unix>.sh</unix>
</binFileExtensions>
<!-- Set the target configuration directory to be used in the bin scripts -->
<configurationDirectory>conf</configurationDirectory>
<!-- Copy the contents from "/src/main/config" to the target configuration directory in the assembled application -->
<copyConfigurationDirectory>false</copyConfigurationDirectory>
<!-- Include the target configuration directory in the beginning of the classpath declaration in the bin scripts -->
<includeConfigurationDirectoryInClasspath>false</includeConfigurationDirectoryInClasspath>
<assembleDirectory>${project.build.directory}/${project.artifactId}-pkg</assembleDirectory>
<!-- Extra JVM arguments that will be included in the bin scripts -->
<extraJvmArguments>-Xms1024m -Xmx1024m</extraJvmArguments>
<!-- Generate bin scripts for windows and unix pr default -->
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<repositoryLayout>flat</repositoryLayout>
<repositoryName>lib</repositoryName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<!-- Remove this after fixing all javadoc warnings -->
<doclint>none</doclint>
<source>${jdk.version}</source>
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.15</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifestEntries>
<Implementation-Title>${project.artifactId}</Implementation-Title>
<Implementation-Version>${project.version}-${buildNumber}</Implementation-Version>
<Implementation-Vendor-Id>${project.groupId}</Implementation-Vendor-Id>
<Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Overridable via -Dunit.test.fork.count (defaults to 1); see the property
definition for details. -->
<forkCount>${unit.test.fork.count}</forkCount>
<reuseForks>false</reuseForks>
<!-- Retries a failing test up to N times (default 0); see property definition. -->
<rerunFailingTestsCount>${unit.test.rerun.count}</rerunFailingTestsCount>
<!-- 60 minutes -->
<forkedProcessTimeoutInSeconds>3600</forkedProcessTimeoutInSeconds>
<!-- Disable zookeeper force sync -->
<systemPropertyVariables>
<zookeeper.forceSync>no</zookeeper.forceSync>
<!-- Expose the 1-based fork index so tests can offset port bases / temp dirs per
fork (1 even at forkCount=1, 1..N under parallel forks). -->
<surefire.forkNumber>$${surefire.forkNumber}</surefire.forkNumber>
</systemPropertyVariables>
<trimStackTrace>false</trimStackTrace>
<reportFormat>plain</reportFormat>
<argLine>
@{argLine}
--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/java.util=ALL-UNNAMED
--add-exports=java.base/jdk.internal.util.random=ALL-UNNAMED
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED
-Dio.netty.tryReflectionSetAccessible=true
-Dio.grpc.netty.shaded.io.netty.tryReflectionSetAccessible=true
-Dnet.bytebuddy.experimental=true
-javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito-core.version}/mockito-core-${mockito-core.version}.jar
-Xshare:off
-XX:+EnableDynamicAgentLoading
</argLine>
</configuration>
<!-- Explicitly select the test provider, instead of relying on the classpath -->
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-testng</artifactId>
<version>${surefire.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>default-cli</id> <!-- magic id, used when calling enforcer:enforce -->
<goals>
<goal>enforce</goal>
</goals>
<phase>validate</phase>
<configuration>
<rules>
<dependencyConvergence />
<bannedDependencies>
<excludes>
<!-- Use org.slf4j:jcl-over-slf4j -->
<exclude>commons-logging:commons-logging</exclude>
<!-- Use org.apache.logging.log4j:log4j-core -->
<exclude>log4j:log4j</exclude>
<!-- Use org.apache.logging.log4j:log4j-slf4j2-impl -->
<exclude>org.slf4j:slf4j-log4j12</exclude>
<exclude>org.slf4j:slf4j-reload4j</exclude>
<exclude>ch.qos.reload4j:reload4j</exclude>
<exclude>ch.qos.logback</exclude>
<!-- Use com.fasterxml.jackson -->
<exclude>org.codehaus.jackson</exclude>
<!-- Use org.glassfish.jersey -->
<exclude>com.sun.jersey</exclude>
<!-- Use hadoop-shaded-protobuf_3_21 -->
<exclude>org.apache.hadoop.thirdparty:hadoop-shaded-protobuf_3_7</exclude>
<!-- Use org.bouncycastle:bcprov-jdk18on -->
<exclude>org.bouncycastle:bcprov-jdk15on</exclude>
<!-- Use at.yawk.lz4:lz4-java -->
<exclude>org.lz4:lz4-java</exclude>
</excludes>
</bannedDependencies>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<version>5.1.2</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>3.3.0</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.21.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
<configuration>
<autoVersionSubmodules>true</autoVersionSubmodules>
</configuration>
</plugin>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
<goal>test-compile</goal>
<goal>test-compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>${jdk.version}</release>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<fork>true</fork>
<encoding>${project.build.sourceEncoding}</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2-metadata-generator</artifactId>
</path>
<path>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</path>
<path>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>${google.auto-service.version}</version>
</path>
<path>
<groupId>org.immutables</groupId>
<artifactId>value-processor</artifactId>
<version>${immutables.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>javacc-maven-plugin</artifactId>
<version>3.2.0</version>
<dependencies>
<dependency>
<groupId>net.java.dev.javacc</groupId>
<artifactId>javacc</artifactId>
<!-- Higher version JavaCC throws exception when generating custom Calcite parser -->
<version>5.0</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.9.10</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sourceDir>src/main/java</sourceDir>
</configuration>
</execution>
<execution>
<id>scala-compile-first</id>
<phase>process-resources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>scala-test-compile-first</id>
<phase>process-test-resources</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
<execution>
<id>attach-scaladocs</id>
<phase>verify</phase>
<goals>
<goal>doc-jar</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<release>${jdk.version}</release>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<args>
<arg>-unchecked</arg>
<arg>-deprecation</arg>
<arg>-feature</arg>
</args>
<jvmArgs>
<jvmArg>-Xms1024m</jvmArg>
<jvmArg>-Xmx1024m</jvmArg>
</jvmArgs>
<javacArgs>
<javacArg>-Xlint:all,-serial,-path</javacArg>
</javacArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.scalatest</groupId>
<artifactId>scalatest-maven-plugin</artifactId>
<version>2.2.0</version>
<configuration>
<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
<junitxml>.</junitxml>
<parallel>false</parallel>
</configuration>
<executions>
<execution>
<id>test</id>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.6.1</version>
</plugin>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.15.4</version>
</plugin>
<plugin>
<groupId>net.nicoulaj.maven.plugins</groupId>
<artifactId>checksum-maven-plugin</artifactId>
<version>1.11</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.6.3</version>
</plugin>
<plugin>
<groupId>org.eclipse.sisu</groupId>
<artifactId>sisu-maven-plugin</artifactId>
<version>1.1.0</version>
<executions>
<execution>
<goals>
<goal>main-index</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-java-version</id>
<phase>validate</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[25,)</version>
<message>Apache Pinot requires JDK 25 or newer to build.</message>
</requireJavaVersion>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>${pinot.root}/config/checkstyle.xml</configLocation>
<suppressionsLocation>${pinot.root}/config/suppressions.xml</suppressionsLocation>
<propertyExpansion>config_loc=${pinot.root}/config</propertyExpansion>
<logViolationsToConsole>true</logViolationsToConsole>
<violationSeverity>${checkstyle.violation.severity}</violationSeverity>
<failOnViolation>${checkstyle.fail.on.violation}</failOnViolation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
</configuration>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>14.1.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>checkstyle</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<!--
Configuration for unit/integration tests section 2 of 3 (plugins) STARTS HERE.
This is the core piece for being able to manage unit tests and
integration (='system') tests within Maven by using surefire.
See also: properties section and profiles section.
-->
<configuration>
<testFailureIgnore>false</testFailureIgnore>
<!-- Excludes integration tests when unit tests are run. -->
<excludes>
<exclude>**/*IT.java</exclude>
</excludes>
<!-- forkCount is overridable via -Dunit.test.fork.count (defaults to 1). Each
fork runs a distinct test class (reuseForks=false), so raising the count
parallelizes classes across JVMs while preserving class-level isolation. -->
<forkCount>${unit.test.fork.count}</forkCount>
<reuseForks>false</reuseForks>
<!-- Retries a failing test up to N times before marking it failed (default 0 = no
retry). CI sets this to tolerate a handful of pre-existing load-sensitive flaky
tests (Lucene NRT refresh, filesystem mtime) that surface only when many parallel
forks saturate the runner; a test that passes on retry is reported as flaky, not
green-washed. -->
<rerunFailingTestsCount>${unit.test.rerun.count}</rerunFailingTestsCount>
<properties>
<!-- Surefire is the default report writer; modules can explicitly opt into an isolated
reporter. TestNG's native HTML/XML reporters write shared files and assets, which
race when multiple forks use one module. -->
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
</properties>
<systemPropertyVariables>
<!-- Expose the 1-based fork index (1 even at forkCount=1, 1..N under parallel forks)
so tests can offset port bases / temp dirs per fork (see ZkStarter.FORK_PORT_OFFSET,
ControllerTest port bases). -->
<surefire.forkNumber>$${surefire.forkNumber}</surefire.forkNumber>
</systemPropertyVariables>
</configuration>
<executions>
<execution>
<id>integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<skip>${SKIP_INTEGRATION_TESTS}</skip>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*IT.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<!-- Default configuration for all reports -->
<excludePackageNames>protobuf.grpc-java.org.apache.pinot.common.proto</excludePackageNames>
</configuration>
<executions>
<execution>
<id>aggregate</id>
<goals>
<goal>aggregate</goal>
</goals>
<phase>site</phase>
<configuration>
<!-- Specific configuration for the aggregate report -->
<excludePackageNames>
org.apache.pinot.common.request:org.apache.pinot.common.response
</excludePackageNames>
<skip>false</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.mycila</groupId>
<artifactId>license-maven-plugin</artifactId>
<configuration>
<licenseSets>
<licenseSet>
<header>${pinot.root}/HEADER</header>
<headerDefinitions>
<headerDefinition>${pinot.root}/headerdefinition.xml</headerDefinition>
</headerDefinitions>
<excludes>
<!-- Text and log files -->
<exclude>**/*.txt</exclude>
<exclude>**/*.log</exclude>
<exclude>**/*.list</exclude>
<exclude>**/*.out</exclude>
<exclude>**/*.generated</exclude>
<exclude>**/*.json</exclude>
<exclude>**/*.schema</exclude>
<exclude>**/*.sql</exclude>
<!-- JDBC Drivers -->
<exclude>**/java.sql.*</exclude>
<!-- Spark datasource register -->
<exclude>**/org.apache.spark.sql.sources.DataSourceRegister</exclude>
<!-- Binary files -->
<exclude>**/*.avro</exclude>
<exclude>**/*.avsc</exclude>
<exclude>**/*.csv</exclude>
<exclude>**/*.desc</exclude>
<exclude>**/*.fst</exclude>
<exclude>**/*.parquet</exclude>
<exclude>**/*.gz</exclude>
<exclude>**/*.gzip</exclude>
<exclude>**/*.orc</exclude>
<exclude>**/*.dict</exclude>
<exclude>**/*.raw</exclude>
<exclude>**/*.mapping</exclude>
<exclude>**/*.ser</exclude>
<exclude>**/*.v1</exclude>
<exclude>**/*.v2</exclude>
<exclude>**/*.parq</exclude>
<exclude>**/*.parquet.encrypted</exclude>
<!-- Pinot index files -->
<exclude>**/index_map</exclude>
<exclude>**/star_tree_index</exclude>
<exclude>**/star_tree_index_map</exclude>
<!-- Auto-generated target directories -->
<exclude>target/**</exclude>
<exclude>pinot-*/target/**</exclude>
<!-- Docker and Kubernetes (not part of the distribution) -->
<exclude>docker/**</exclude>
<exclude>helm/**</exclude>
<!-- Pinot-Druid Benchmark (not part of the distribution) -->
<exclude>contrib/**</exclude>
<!-- Top level files -->
<exclude>HEADER</exclude>
<exclude>LICENSE*</exclude>
<exclude>NOTICE*</exclude>
<exclude>.trivyignore</exclude>
<exclude>doap_Pinot.rdf</exclude>
<!-- js, css files that are exact copies of the third-party works. In this case, the original header has to
be kept. Please refer to 'Treatment of Third-party works' in https://www.apache.org/legal/src-headers.html
-->
<exclude>**/node_modules/**</exclude>
<exclude>**/dist/**</exclude>
<exclude>**/src/main/resources/*.*rc</exclude>
<!-- files from Eclipse -->
<exclude>**/maven-eclipse.xml</exclude>
<exclude>**/.settings/**</exclude>
<exclude>**/.project</exclude>
<exclude>**/.classpath</exclude>
<exclude>.externalToolBuilders/**</exclude>
<!-- Knowledge base (not source code) -->
<exclude>kb/**</exclude>
<!-- GenAI Config files -->
<exclude>.claude/**</exclude>
<exclude>.codex/**</exclude>
<exclude>.continue/**</exclude>
<exclude>.copilot/**</exclude>
<exclude>.cursor/**</exclude>
<exclude>.openai/**</exclude>
<exclude>.ollama/**</exclude>
<!-- specific files -->
<exclude>**/src/test/resources/*version-header.properties</exclude>
</excludes>
</licenseSet>
</licenseSets>
<mapping>
<java>JAVADOC_STYLE</java>
<scala>JAVADOC_STYLE</scala>
<thrift>JAVADOC_STYLE</thrift>
<jj>JAVADOC_STYLE</jj>
<ts>JAVADOC_STYLE</ts>
<tsx>JAVADOC_STYLE</tsx>
<config>SCRIPT_STYLE</config>
<queries>SCRIPT_STYLE</queries>
<results>SCRIPT_STYLE</results>
<fmpp>SCRIPT_STYLE</fmpp>
<ftl>FTL_STYLE</ftl>
<MockMaker>SCRIPT_STYLE</MockMaker>
<appAssemblerScriptTemplate>SCRIPT_STYLE</appAssemblerScriptTemplate>
<inc>SCRIPT_STYLE</inc>
<sql>SCRIPT_STYLE</sql>
<conf>DOUBLESLASH_STYLE</conf>
<cfg>DOUBLESLASH_STYLE</cfg>
<proto>DOUBLESLASH_STYLE</proto>
<rst>RST_STYLE</rst>
<readme>RST_STYLE</readme>
</mapping>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.rat</groupId>
<artifactId>apache-rat-plugin</artifactId>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<!-- Exclude license copies -->
<exclude>licenses/**</exclude>
<exclude>licenses-binary/**</exclude>
<!-- Exclude build targets -->
<exclude>**/target/**</exclude>
<!-- Exclude Maven plugin generated files -->
<exclude>**/dependency-reduced-pom.xml</exclude>
<!-- Text and log files -->
<exclude>**/*.txt</exclude>
<exclude>**/*.log</exclude>
<exclude>**/*.list</exclude>
<exclude>**/*.out</exclude>
<exclude>**/*.generated</exclude>
<exclude>**/*.json</exclude>
<exclude>**/*.schema</exclude>
<exclude>**/*.sql</exclude>
<!-- JDBC Drivers -->
<exclude>**/java.sql.*</exclude>
<!-- Spark datasource register -->
<exclude>**/org.apache.spark.sql.sources.DataSourceRegister</exclude>
<!-- Binary files -->
<exclude>**/*.avro</exclude>
<exclude>**/*.avsc</exclude>
<exclude>**/*.csv</exclude>
<exclude>**/*.desc</exclude>
<exclude>**/*.fst</exclude>
<exclude>**/*.parquet</exclude>
<exclude>**/*.gz</exclude>
<exclude>**/*.orc</exclude>
<exclude>**/*.dict</exclude>
<exclude>**/*.raw</exclude>
<exclude>**/*.mapping</exclude>
<exclude>**/*.ser</exclude>
<exclude>**/*.v1</exclude>
<exclude>**/*.v2</exclude>
<exclude>**/Text.lucene.index/**</exclude>
<exclude>**/appAssemblerScriptTemplate</exclude>
<exclude>doap_Pinot.rdf</exclude>
<!-- js, css files that are exact copies of the third-party works. In this case, the original header has to
be kept. Please refer to 'Treatment of Third-party works' in https://www.apache.org/legal/src-headers.html
-->
<exclude>**/node_modules/**</exclude>
<exclude>**/dist/**</exclude>
<exclude>**/*.*rc</exclude>
<exclude>**/src/main/resources/*.*rc</exclude>
<!-- IDE files -->
<exclude>**/*.iml</exclude>
<exclude>**/maven-eclipse.xml</exclude>
<exclude>**/.settings/**</exclude>
<exclude>**/.project</exclude>
<exclude>**/.classpath</exclude>
<exclude>.externalToolBuilders/**</exclude>
<!-- Knowledge base (not source code) -->
<exclude>kb/**</exclude>
<!-- GenAI Config files -->
<exclude>.claude/**</exclude>
<exclude>.codex/**</exclude>
<exclude>.continue/**</exclude>
<exclude>.copilot/**</exclude>
<exclude>.cursor/**</exclude>
<exclude>.openai/**</exclude>
<exclude>.ollama/**</exclude>
<!-- Docker and Kubernetes (not part of the distribution) -->
<exclude>helm/**</exclude>
<exclude>docker/**</exclude>
<exclude>.trivyignore</exclude>
<!-- Pinot-Druid Benchmark (not part of the distribution) -->
<exclude>contrib/**</exclude>
<!-- Github template files -->
<exclude>.github/*.md</exclude>
<!-- Test output -->
<exclude>**/test-output/**</exclude>
<!-- MISC -->
<exclude>**/.factorypath</exclude>
<!-- specific files -->
<exclude>**/src/test/resources/*version-header.properties</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<configuration>
<skip>${pinot.skip.buildnumber}</skip>
</configuration>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-transform-maven-shade-plugin-extensions</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>${shade.phase.prop}</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<shadedArtifactAttached>true</shadedArtifactAttached>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<!-- See https://logging.apache.org/log4j/transform for details -->
<transformer implementation="org.apache.logging.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${mainClass}</mainClass>
<manifestEntries>
<Multi-Release>true</Multi-Release>
</manifestEntries>
</transformer>
</transformers>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<!-- Exclude signed manifests -->
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
<!-- See https://github.com/apache/pinot/issues/11974 for details -->
<exclude>module-info.class</exclude>
<!-- Solve NoClassDefFoundError. Borrowed from https://github.com/prometheus/jmx_exporter/issues/802 -->
<exclude>META-INF/versions/9/org/yaml/snakeyaml/internal/**</exclude>
<!-- Exclude NettyInstance because it includes Netty package literals -->
<exclude>src/main/java/org/apache/pinot/core/transport/NettyInstance.java</exclude>
</excludes>
</filter>
<filter>
<!-- hadoop-client-runtime is a Hadoop uber-jar that bundles its own relocated Jetty
(org.apache.hadoop.shaded.org.eclipse.jetty). It exists only for Hadoop's embedded
HttpServer2 web UIs, which Pinot input-format / filesystem plugins never start, so
the classes are unreachable, but the leftover jetty-* Maven metadata still makes
scanners flag CVE-2026-2332 (jetty-http request smuggling). A Maven exclusion
cannot remove these because the classes are baked into the uber-jar rather than
resolved as a dependency node, so strip them from any shaded jar here. -->
<artifact>org.apache.hadoop:hadoop-client-runtime</artifact>
<excludes>
<exclude>org/apache/hadoop/shaded/org/eclipse/jetty/**</exclude>
<exclude>META-INF/maven/org.eclipse.jetty/**</exclude>
<exclude>META-INF/maven/org.eclipse.jetty.websocket/**</exclude>
<!-- ServiceLoader entries whose implementation classes are removed above. -->
<exclude>META-INF/services/org.apache.hadoop.shaded.org.eclipse.jetty.**</exclude>
</excludes>
</filter>
</filters>
<relocations>
<relocation>
<pattern>com.fasterxml.jackson</pattern>
<shadedPattern>${shade.prefix}.com.fasterxml.jackson</shadedPattern>
</relocation>
<relocation>
<pattern>com.google.common</pattern>
<shadedPattern>${shade.prefix}.com.google.common</shadedPattern>
</relocation>
<relocation>
<pattern>org.scala-lang</pattern>
<shadedPattern>${shade.prefix}.org.scala-lang</shadedPattern>
</relocation>
</relocations>
</configuration>
</plugin>
<!-- Include apache LICENSE, NOTICE files for jar resource bundle -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<configuration>
<skip>${pinot.skip.remote.resources}</skip>
<properties>
<projectName>Apache Pinot</projectName>
</properties>
</configuration>
</plugin>
<plugin>
<groupId>de.shadowhunt.maven.plugins</groupId>
<artifactId>package-info-maven-plugin</artifactId>
<version>2.0.0</version>
<executions>
<execution>
<phase>${package.info.phase}</phase>
<goals>
<goal>package-info</goal>
</goals>
</execution>
</executions>
<configuration>
<packages>
<package regex="org.apache.pinot.**">
<annotations>
<annotation>@javax.annotation.ParametersAreNonnullByDefault</annotation>
<annotation>@org.jspecify.annotations.NullMarked</annotation>
</annotations>
</package>
</packages>
</configuration>
</plugin>
</plugins>
</build>
<!-- TODO: Revisit if we need reporting -->
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<configuration>
<dependencyLocationsEnabled>false</dependencyLocationsEnabled>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<!-- Default configuration for all reports -->
<excludePackageNames>protobuf.grpc-java.org.apache.pinot.common.proto</excludePackageNames>
</configuration>
<reportSets>
<reportSet>
<id>non-aggregate</id>
<configuration>
<!-- Specific configuration for the non aggregate report -->
<excludePackageNames>
org.apache.pinot.common.request:org.apache.pinot.common.response
</excludePackageNames>
<skip>true</skip>
</configuration>
<reports>
<report>javadoc</report>
</reports>
</reportSet>
<reportSet>
<id>aggregate</id>
<configuration>
<excludePackageNames>
org.apache.pinot.common.request:org.apache.pinot.common.response
</excludePackageNames>
<skip>true</skip>
</configuration>
<reports>
<report>aggregate</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
</project>