Skip to content

Add pinot-bom: Bill of Materials for Pinot module versions#18542

Open
gortiz wants to merge 5 commits into
apache:masterfrom
gortiz:feat/pinot-bom
Open

Add pinot-bom: Bill of Materials for Pinot module versions#18542
gortiz wants to merge 5 commits into
apache:masterfrom
gortiz:feat/pinot-bom

Conversation

@gortiz
Copy link
Copy Markdown
Contributor

@gortiz gortiz commented May 20, 2026

Summary

  • Introduces a new pinot-bom module: a Maven Bill of Materials (BOM) that pins every org.apache.pinot artifact to a single consistent version.
  • The root POM now imports pinot-bom in its dependencyManagement instead of listing all Pinot modules individually; new subproject entries belong in pinot-bom/pom.xml.
  • Extension and plugin developers can now depend on Pinot modules by importing a single BOM (pinot-bom) rather than declaring dozens of individual version entries.

Backward compatibility

Projects that already set the Pinot root POM as their <parent> are unaffected. The inherited dependencyManagement they receive is equivalent to before — the only structural difference is that the module list now lives in pinot-bom and is imported by the root POM rather than being declared inline.

Test plan

  • Root POM builds cleanly: ./mvnw validate -N
  • pinot-bom installs to local repo: cd pinot-bom && ../mvnw install
  • Effective POM for root resolves all Pinot modules to the correct version: ./mvnw help:effective-pom -N
  • mvn versions:set -DnewVersion=X.Y.Z from repo root updates both the root POM and pinot-bom/pom.xml in one step

🤖 Generated with Claude Code

@gortiz gortiz requested a review from xiangfu0 May 20, 2026 15:27
Comment thread pinot-bom/pom.xml
</dependency>
<dependency>
<groupId>org.apache.pinot</groupId>
<artifactId>pinot-kafka-3.0</artifactId>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will there be conflict for kafka3 and kafka4?
similar to spark 3 and 4 etc

Copy link
Copy Markdown
Contributor

@xiangfu0 xiangfu0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall a neat solution.
Please ensure you fixed the CI before the merge

gortiz and others added 2 commits May 22, 2026 16:40
Introduces a new pinot-bom module (packaging=pom) that consolidates all
org.apache.pinot dependencyManagement entries into a single importable BOM.
The root pom's Pinot module entries are replaced with a single BOM import.

Downstream projects (e.g. startree-pinot) that inherit from the Pinot root
POM cannot use ${project.version} in the inherited dependencyManagement —
it resolves to the downstream project's own version. Now they can replace
their entire duplicated block with:

    <dependency>
      <groupId>org.apache.pinot</groupId>
      <artifactId>pinot-bom</artifactId>
      <version>${apache.pinot.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>

Design note: pinot-bom deliberately has no <parent>. Maven 3 rejects a
cycle where the root pom imports a BOM that also inherits from that same
root pom. By omitting the parent and declaring coordinates explicitly,
Maven can resolve pinot-bom/pom.xml independently. The `mvn versions:set`
plugin still updates pinot-bom's explicit version because it is listed in
the root pom's <modules> and carries a matching version.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
gortiz and others added 3 commits May 22, 2026 17:25
pinot-bom has no <parent>, so it cannot inherit the root pom's
pluginManagement entry for com.mycila:license-maven-plugin. Without an
explicit binding, `mvn license:check` falls back to
org.codehaus.mojo:license-maven-plugin which has no "check" goal in
version 2.7.1. Bind the mycila plugin directly with skip=true: the only
file in this module is pom.xml, whose license header is already checked
by the root-level Apache RAT execution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Two issues:

1. spotless:check and license:check fail on pinot-bom because it has no
   <parent> and therefore inherits no pluginManagement. Maven falls back
   to unknown plugin prefixes for both 'spotless' and 'license'. Fix:
   bind both plugins explicitly in pinot-bom with <skip>true</skip>;
   there are no Java source files to check here.

2. assembly-descriptor IT test (simple-assembly) fails because the
   maven-invoker-plugin builds it against an isolated local repo that only
   contained pinot-spi. pinot-spi inherits from the pinot root pom, which
   now imports pinot-bom in its dependencyManagement. Maven tries to
   resolve pinot-bom during the simple-assembly build and cannot find it
   in the isolated repo. Fix: add pinot-bom as an extraArtifact so the
   invoker pre-installs it into the IT repo alongside pinot-spi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Without a parent, the enforcer plugin has no rules configured and fails
with "No rules are configured." Explicitly bind it with <skip>true</skip>
so the CI linter's `enforcer:enforce` invocation is a no-op for this module.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants