Resolving Maven Dependency Version Conflicts

Maven handles dependency version conflicts through two primary rules: "nearest definition" and "first declaratino". When you directly include hutool-all:5.8.38 but it gets overridden by a transitive dependency (like spx-boot-starter pulling hutool-all:5.8.10), use these approaches to enforce your preferred version:

Approach 1: Version Locking with <dependencyManagement>

Define the desired version in the dependency management section to enforce it globally:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.38</version>
        </dependency>
    </dependencies>
</dependencyManagement>

Approach 2: Exclude and Reintroduce

Remove the transitive dependency and explicitly declare your version:

<dependencies>
    <dependency>
        <groupId>com.spx</groupId>
        <artifactId>spx-boot-starter</artifactId>
        <version>${spx-cloud.version}</version>
        <exclusions>
            <exclusion>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.38</version>
    </dependency>
</dependencies>

Approach 3: Leverage Declaration Order (Maven 3.8.1+)

In newer Maven versions, declaration order takes precedence over dependency depth:

<dependencies>
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.8.38</version>
    </dependency>
    
    <dependency>
        <groupId>com.spx</groupId>
        <artifactId>spx-boot-starter</artifactId>
        <version>${hailian-cloud.version}</version>
    </dependency>
</dependencies>

Verification Command

Check the resolved dependency tree to confirm version enforcement:

mvn dependency:tree | grep hutool-all
# Expected output:
# [INFO] +- cn.hutool:hutool-all:jar:5.8.38:compile

Implementation Guidelines

  1. Prefer dependencyManagement: This maintains cleaner project structure
  2. Targeted overrides only: Avoid blanket version changes to prevent compatibility issues
  3. Version validatoin: Verify that 5.8.38 works with all dependent components

These methods provide reliable ways to control dependency versions in Maven projects while maintaining build stability.

Tags: Maven dependency-management version-conflict java

Posted on Wed, 10 Jun 2026 17:25:56 +0000 by mcatalf0221