Skip to content

[P2] Create BOM (Bill of Materials) module for dependency management #316

@sfloess

Description

@sfloess

Problem

Large multi-module project lacks a BOM module for centralized dependency version management.

Impact

  • Severity: LOW-MEDIUM
  • Category: Developer Experience
  • Users must manually specify versions for all modules
  • Increases risk of version conflicts
  • More verbose pom.xml in consuming projects

Current State

Users must do this:

<dependencies>
    <dependency>
        <groupId>org.flossware.jplatform</groupId>
        <artifactId>platform-java-api</artifactId>
        <version>1.1</version>
    </dependency>
    <dependency>
        <groupId>org.flossware.jplatform</groupId>
        <artifactId>platform-java-core</artifactId>
        <version>1.1</version>
    </dependency>
    <!-- Repeat for every module... -->
</dependencies>

Proposed Solution

Create jplatform-bom module:

<project>
    <groupId>org.flossware.jplatform</groupId>
    <artifactId>jplatform-bom</artifactId>
    <version>1.1</version>
    <packaging>pom</packaging>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.flossware.jplatform</groupId>
                <artifactId>platform-java-api</artifactId>
                <version>${project.version}</version>
            </dependency>
            <!-- All platform-java modules here -->
        </dependencies>
    </dependencyManagement>
</project>

User Experience

With BOM, users do this:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.flossware.jplatform</groupId>
            <artifactId>jplatform-bom</artifactId>
            <version>1.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.flossware.jplatform</groupId>
        <artifactId>platform-java-api</artifactId>
        <!-- No version needed! -->
    </dependency>
    <dependency>
        <groupId>org.flossware.jplatform</groupId>
        <artifactId>platform-java-core</artifactId>
        <!-- No version needed! -->
    </dependency>
</dependencies>

Examples

Similar to:

  • Spring BOM: spring-boot-dependencies
  • Jackson BOM: jackson-bom
  • AWS SDK BOM: bom

Priority

P2 - Medium - Nice to have for v1.2, should have for v1.3.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions