Hi Alex,
with this proposal the hierarchy of the framework-specific modules is
completely separated.
There is (in abstract terms)
one bom for all external/common libraries
one bom for quarkus modules
one bom for springboot modules
Framework-specific boms *inherit* (*not import!*) the common one: i.e. the
"common bom" is the parent of the framework-specific ones.
So, at framework-specific bom level, it is possible to override the version
inherited from the parent.
At the same time, for a given library, it is possible to have one version
for the quarkus hierarchy and a different version for the springboot one.

Please note that I wrote "one bom" only to simplify and make clear the
concept behind.

I hope this would make sense and clarify your doubts.




On Thu, Apr 30, 2026 at 7:38 PM Alex Porcelli <[email protected]> wrote:

> I might have gotten lost in the length of the proposal, so apologies
> if I missed it. I am still not sure how the isolation actually helps
> with the Spring Boot 4 upgrade case you mentioned. There are several
> shared libraries used in common implementations (Jackson being the
> obvious one), where the conflict between frameworks does not seem to
> go away.
>
> Could you walk through, in simplified terms, how the proposal
> addresses this in both the common and framework-specific codebases?
>
> On Thu, Apr 30, 2026 at 12:45 PM Yeser Amer <[email protected]> wrote:
> >
> > Hi Alex, thank you for your feedback.
> >
> > Thank you for raising this important point about independent framework
> upgrades. Let me clarify how this proposal addresses exactly this concern.
> >
> > The ability to perform independent framework upgrades is one of the main
> problems this proposal solves. We're currently experiencing this challenge
> firsthand with the Spring Boot 4 upgrade (
> https://github.com/apache/incubator-kie-issues/issues/2288), where we're
> struggling to find versions of Jackson and Netty that are compatible with
> both Quarkus 3.27.2 and Spring Boot 4.
> >
> > With this proposal, while most dependency versions will be declared in
> kie-parent, the framework-specific BOMs (kogito-quarkus-bom and
> kogito-spring-boot-bom) will be able to override these versions when
> necessary. This means:
> >
> > - Shared dependencies (like Jackson, Netty, Reactor) will have a
> baseline version in kie-parent
> > - Framework-specific overrides can be declared in kogito-quarkus-bom or
> kogito-spring-boot-bom when the framework requires a different version
> > - Modules depending on a specific framework will inherit the appropriate
> version through their framework-specific BOM parent
> > This approach eliminates the current situation where we must find a
> single version that satisfies both frameworks simultaneously—a constraint
> that often blocks upgrades entirely. Instead, each framework can use the
> version it requires, and only the framework-agnostic modules in kie-parent
> need to work with a common baseline.
> >
> > I realize that this key aspect was not properly highlighted in the
> proposal; hopefully, it is clearer now.
> >
> > Thanks,
> >
> > Yeser
> >
> > On 2026/04/30 16:03:18 Alex Porcelli wrote:
> > > Thanks, Yeser, Gabriele, and Chinchu, for taking this on. The
> > > diagnosis is mostly right: the duplication, the empty framework BOMs,
> > > and the convergence issues are real.
> > >
> > > A few concerns, though:
> > >
> > > Timing. We are mid-consolidation for 10.3.x under Tiago's plan, across
> > > the same repos. Running a structural BOM rework in parallel will fight
> > > for review bandwidth and make regressions hard to bisect. Strong
> > > preference to finish 10.3.x first.
> > >
> > > Scope. This bundles at least four independent changes (dedup, empty
> > > BOMs, kie-parent split + enforcer rules, kogito-apps reorg). Each has
> > > a different risk and reviewers. Could we split into separate
> > > proposals? I can get behind some of them on their own, but not as one
> > > package.
> > >
> > > Independent framework upgrades. Not convinced this holds up. Shared
> > > deps like Jackson, Netty, and Reactor are pulled by both Quarkus and
> > > Spring Boot at different versions. If they live in kie-parent, BOM
> > > import ordering decides who wins, and the proposal does not specify
> > > it. Most CVEs hit shared transitive deps anyway, so cross-framework
> > > coordination does not really go away. A worked example through a
> > > recent CVE would help.
> > >
> > > Happy to support smaller, focused proposals after 10.3.x lands.
> > >
> > > -
> > > Alex
> > >
> > > On Thu, Apr 30, 2026 at 10:12 AM Yeser Amer <[email protected]> wrote:
> > > >
> > > > Hi Apache KIE community,
> > > >
> > > > Long-time contributors know how time‑consuming it can be to upgrade
> > > > Kogito's required frameworks, such as Quarkus and Spring Boot. This
> > > > activity is both critical and recurring, yet based on our experience
> it
> > > > often requires a significant and unpredictable amount of effort.
> > > >
> > > > Given how frequently we need to perform these upgrades, we believe
> it's
> > > > time to improve the process. We would like to propose a set of
> changes to
> > > > the current BOM management approach, based on lessons learned from
> past
> > > > upgrades across the KIE ecosystem.
> > > >
> > > > We welcome any opinions and feedback from the community. To better
> > > > understand the proposed changes, please review the draft PRs that
> > > > demonstrate the implementation. We encourage discussion and
> collaboration
> > > > on these PRs to refine the approach. For tracking and coordination,
> please
> > > > refer to the main issue:
> > > > https://github.com/apache/incubator-kie-issues/issues/2029. Here,
> you can
> > > > find the open PRs ready to be reviewed.
> > > >
> > > > The goal of this initiative is to:
> > > >
> > > >    - reduce the overall time spent on framework upgrades,
> > > >    - make the process more predictable and consistent,
> > > >    - enable both current and future maintainers to complete these
> tasks in
> > > >    days rather than weeks,
> > > >    - allow each framework to be upgraded independently, without
> worrying
> > > >    about transitive dependency conflicts,
> > > >    - apply CVE fixes faster without cross-framework coordination.
> > > >
> > > > The proposed changes will impact the following repos:
> > > >
> > > >    - drools
> > > >    - kogito-runtimes
> > > >    - kogito-apps
> > > >    - kogito-examples
> > > >    - kie-tools
> > > >
> > > > Current Status of BOM Management
> > > >
> > > > drools:
> > > >
> > > >    - build-parent/pom.xml: This module currently acts as the main
> BOM,
> > > >    managing both the third-party dependencies and the internal
> dependency
> > > >    declarations. It also defines Quarkus (and likely several
> Quarkus‑related
> > > >    dependencies). Three main issues have been identified:
> > > >       1. Framework coupling: The drools repo should be "cloud-native
> > > >       framework agnostic"; Quarkus and related specific dependencies
> should not
> > > >       be declared here.
> > > >       2. Mixed responsibility inside the BOM: Internal project
> dependencies
> > > >       and external third‑party dependencies are currently managed
> > > > within the same
> > > >       BOM. This makes version alignment, troubleshooting, and
> > > > framework upgrades
> > > >       harder to reason about, and increases the risk of unintended
> side effects
> > > >       during dependency updates.
> > > >       3. Scattered dependency declarations across submodules: Not all
> > > >       third‑party dependencies are declared in the main BOM; some
> are managed
> > > >       directly within individual submodules. This fragmentation
> makes it more
> > > >       difficult to track, align, and update dependencies consistently
> > > > across the
> > > >       codebase.
> > > >
> > > > kogito-runtimes:
> > > >
> > > >    - kogito-dependencies-bom/pom.xml: Acts as the main BOM for Kogito
> > > >    runtime projects, declaring third‑party dependencies required for
> > > >    cloud‑native applications (e.g. Quarkus, Spring Boot, and related
> > > >    libraries).
> > > >    - kogito-quarkus-bom/pom.xml: Intended to manage third‑party
> > > >    dependencies specific to Quarkus‑based Kogito applications.
> > > >    - kogito-spring-boot-bom/pom.xml: Intended to manage third‑party
> > > >    dependencies specific to Spring Boot‑based Kogito applications.
> > > >
> > > > Main issues identified:
> > > >
> > > >    1. Unused framework‑specific BOMs: Despite the presence of both
> > > >    kogito-quarkus-bom and kogito-spring-boot-bom, which are intended
> to
> > > >    manage Quarkus and Spring Boot dependencies respectively, these
> BOMs are
> > > >    effectively empty and not used for their intended scope. As a
> result,
> > > >    framework‑specific dependencies are still being managed elsewhere,
> > > >    defeating the purpose of having dedicated BOMs.
> > > >    2. Duplication of third‑party dependency declarations: A
> significant
> > > >    portion of the third‑party dependencies declared in
> kogito-dependencies-bom
> > > >    duplicates dependencies already declared in
> drools/build-parent/pom.xml.
> > > >    This duplication is unnecessary and increases the risk of: version
> > > >    misalignment, dependency conflicts, higher maintenance costs
> (e.g. CVE
> > > >    fixes and coordinated upgrades).
> > > >
> > > > kogito-apps: The kogito-apps repository does not currently define
> its own
> > > > BOM to manage third-party dependencies. However, the existing project
> > > > structure limits the ability to take advantage of the
> framework‑specific
> > > > BOM split already present in the kogito-runtimes repository.
> > > >
> > > > The applications are organized by feature rather than by framework,
> using
> > > > the following structure:
> > > >
> > > > kogito-apps/feature+ common-impl+ quarkus-impl+ spring-boot-impl
> > > >
> > > > kie-tools: This repository has a Maven module acting as a BOM,
> maven-base.
> > > > It already imports kogito-apps-bom, together with additional
> unnecessary
> > > > KIE BOMs. As a result, Quarkus-specific dependencies are mixed into a
> > > > shared dependency management layer.
> > > > Problems to Solve
> > > >
> > > >    - The same dependency is declared with different versions in
> "parent"
> > > >    and "children" modules
> > > >    - The same dependency is inherited transitively in some modules
> but
> > > >    explicitly declared in others
> > > >    - At the bottom of the stack (final applications/examples) there
> are
> > > >    multiple convergence issues
> > > >    - Wrong behavior often appears at runtime rather than compile
> time,
> > > >    making it hard to detect
> > > >
> > > > Proposed Changes
> > > >
> > > > drools:
> > > >
> > > >    - Introduce a new kie-parent/pom.xml BOM: A new kie-parent module
> will
> > > >    be introduced as the only place where third-party dependencies are
> > > >    declared. This BOM will be used throughout the KIE ecosystem. All
> > > >    identified Quarkus‑related dependencies will be excluded from
> this BOM,
> > > >    keeping it framework agnostic.
> > > >    - Introduce a new kie-parent-drools/pom.xml BOM: A new
> > > > kie-parent-drools module
> > > >    will be introduced as a BOM aggregator for first-party Drools
> dependencies
> > > >    (internal Drools modules). This separates first-party dependency
> management
> > > >    from third-party dependencies in kie-parent.
> > > >    - Refocus drools-build-parent/pom.xml responsibilities: The
> existing
> > > >    drools-build-parent/pom.xml will be refocused to keep build
> > > >    configuration and plugin management only. It will no longer manage
> > > >    first-party dependencies (moved to kie-parent-drools) and will no
> longer
> > > >    declare third-party dependencies directly. It will inherit from
> > > >    kie-parent-drools.
> > > >    - Remove all <dependencyManagement> from submodules: All
> submodules will
> > > >    inherit dependency versions from kie-parent, with no local
> overrides
> > > >    allowed.
> > > >    - Enforce centralized dependency management: Two new enforcer rule
> > > >    modules will be introduced:
> > > >       - kie-no-dependency-management-enforcer-rule: Enforces a "no
> > > >       dependencyManagement" rule within Drools submodules.
> Submodules will
> > > >       no longer be allowed to declare their own
> <dependencyManagement>
> > > > sections,
> > > >       not even inside profiles. This prevents the anti‑pattern of
> declaring
> > > >       dependency versions outside the main BOM. Exceptions will be
> allowed only
> > > >       for well‑justified and explicitly approved cases via the
> > > >       <allowedPomsList> property.
> > > >       - kie-no-external-managed-dependency-enforcer-rule: Blocks
> dependency
> > > >       management entries for external artifacts not part of the
> current
> > > >       multi-module project. This keeps managed dependencies limited
> to the
> > > >       project's own modules and prevents accidentally pulling in or
> controlling
> > > >       versions of unrelated external libraries.
> > > >    - Isolate Quarkus‑specific build logic: A new module,
> > > >    kie-quarkus-build-parent, will be introduced to extend kie-parent
> for
> > > >    the only allowed Quarkus‑related module within Drools (
> > > >    drools-quarkus-extension). This exception is retained for
> historical
> > > >    reasons (Drools has a dependency on Quarkus). It extends rather
> than
> > > >    imports to also inherit pluginManagement.
> > > >
> > > > See diagram:
> > > >
> https://github.com/user-attachments/assets/7db5e9be-213d-4d86-804f-e1f1cffb50d3
> > > >
> > > > kogito-runtimes:
> > > >
> > > >    - Remove kogito-dependencies-bom: Deleted as it's no longer
> needed;
> > > >    functionality replaced by inheriting directly from
> drools/kie-parent through
> > > >    the parent hierarchy, eliminating duplication of third-party
> dependency
> > > >    declarations.
> > > >    - Modify kogito-bom: Existing BOM module, now inherits from
> > > >    drools/kie-parent-drools, aggregating kogito-specific dependency
> > > >    management.
> > > >    - Modify kogito-runtime-bom: Existing runtime BOM, now inherits
> from
> > > >    drools-build-parent for configuration build setting import.
> > > >    - Modify kie-kogito-bom: Existing KIE-Kogito integration BOM, now
> > > >    inherits from drools-build-parent.
> > > >    - Populate kogito-quarkus-bom: Existing but previously unused BOM
> now
> > > >    populated with all Quarkus-specific dependencies; inherits from
> > > >    kogito-build-no-bom-parent; inherited by kogito-apps-quarkus.
> > > >    - Populate kogito-spring-boot-bom: Existing but previously unused
> BOM
> > > >    now populated with all Spring Boot-specific dependencies;
> inherits from
> > > >    kogito-build-no-bom-parent; inherited by kogito-apps-spring-boot.
> > > >    - Remove all <dependencyManagement> from submodules: All
> submodules
> > > >    inherit dependency versions from their parent BOMs.
> > > >    - Uniform checks with drools repository: Apply the same enforcer
> rules
> > > >    and patterns used in drools.
> > > >
> > > > See diagram:
> > > >
> https://github.com/user-attachments/assets/90f80d70-2300-4d8a-901a-330807039440
> > > >
> > > > kogito-apps:
> > > >
> > > >    - Regroup applications by framework instead of by feature: The
> current
> > > >    feature‑centric structure will be reorganized to be
> framework‑centric.
> > > >    Specifically, two top‑level, framework‑specific modules will be
> introduced:
> > > >    kogito-apps-quarkus and kogito-apps-spring-boot. All
> framework‑specific
> > > >    application modules will be moved under their respective top‑level
> > > >    framework module.
> > > >
> > > > See diagram:
> > > >
> https://github.com/apache/incubator-kie-issues/issues/2029#kogito-apps-diagram
> > > >
> > > > kogito-examples: The kogito-examples repository will receive only
> minimal
> > > > changes required to work with the main changes applied in upstream
> > > > repositories. The main changes are: the POM file of the Quarkus
> examples
> > > > module will import the kogito-apps-quarkus-bom BOM and the Spring
> Boot
> > > > examples module will import the kogito-apps-spring-boot-bom BOM.
> > > >
> > > > kie-tools:
> > > >
> > > >    - Keep maven-base as the shared base BOM, but clean it up by
> removing
> > > >    unnecessary dependencies and BOM imports already covered by
> kie-parent
> > > >     (drools).
> > > >    - Create maven-quarkus-bom and maven-spring-boot-bom to manage
> Quarkus
> > > >    and Spring Boot dependencies separately.
> > > >    - Make leaf modules inherit from the appropriate
> framework-specific BOM
> > > >    according to their runtime framework.
> > > >
> > > > See diagram:
> > > >
> https://github.com/user-attachments/assets/06f8362a-092d-40bb-8a01-3560c41a4a8e
> > > > Kudos to Gabriele Cardosi, who is driving this important initiative
> > > > and to Chinchu
> > > > P Shaji for her support.
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [email protected]
> > > For additional commands, e-mail: [email protected]
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to