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
- Prefer dependencyManagement: This maintains cleaner project structure
- Targeted overrides only: Avoid blanket version changes to prevent compatibility issues
- 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.