You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成包含所有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:23:12