生成包含所有Spring Boot默认依赖的SBOM遇阻,求解决方案
生成完整Spring Boot默认依赖SBOM及检测依赖覆盖方案
一、生成包含所有默认依赖的SBOM
之前直接修改dependencyManagement的方式会丢失依赖传递链,正确做法是通过引入官方starter拉取完整默认依赖:
Maven 方案
创建空Maven项目,配置如下pom.xml(以3.2.3版本为例):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>spring-boot-default-sbom</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 继承Spring Boot父POM,自动获取官方依赖版本管理 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.3</version> <relativePath/> </parent> <dependencies> <!-- 核心starter拉取基础默认依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- 添加其他场景starter,覆盖所有默认依赖场景(如web、data-jpa等) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <!-- CycloneDX插件生成SBOM --> <plugin> <groupId>org.cyclonedx</groupId> <artifactId>cyclonedx-maven-plugin</artifactId> <version>2.7.7</version> <executions> <execution> <phase>package</phase> <goals> <goal>makeAggregateBom</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
执行命令:
mvn clean package
生成的SBOM会包含所有starter传递的默认依赖,无遗漏。
Gradle 方案
创建build.gradle配置:
plugins { id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' id 'java' id 'org.cyclonedx.bom' version '1.8.2' } group = 'com.example' version = '0.0.1-SNAPSHOT' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-web' } cyclonedxBom { includeConfigs = ['runtimeClasspath'] outputFormat = 'json' outputName = 'bom' }
执行命令:
./gradlew cyclonedxBom
二、获取Spring Boot官方默认依赖版本
无需手动查文档,直接从官方依赖bom中提取:
- Maven 导出所有依赖版本:
mvn dependency:tree -DoutputFile=default-deps.txt -Dverbose - Gradle 导出所有依赖版本:
./gradlew dependencies --configuration runtimeClasspath > default-deps.txt
也可直接解析spring-boot-dependencies的pom文件,提取<properties>中的版本属性(如logback.version=1.4.14)。
三、检测项目中的依赖覆盖
Maven 项目
用dependency:tree定位特定依赖的版本:
mvn dependency:tree -Dincludes=ch.qos.logback:logback-classic
若输出版本与官方默认不一致,说明该依赖被项目配置覆盖。
Gradle 项目
用依赖命令查看版本:
./gradlew dependencies --configuration runtimeClasspath | grep logback-classic
SBOM对比法
将官方默认SBOM与项目自身SBOM用CycloneDX CLI对比:
cyclonedx compare --bom1=default-bom.json --bom2=project-bom.json --output=diff.json
从diff结果中直接找出版本不一致的依赖项。
内容的提问来源于stack exchange,提问作者Matt Busche
相关产品推荐
相关产品推荐

