本规范定义了项目中依赖管理的原则和实践,确保依赖项的选择、版本控制和更新符合项目需求,并维护代码的稳定性和安全性。
pom.xml 的 <properties> 标签中定义依赖版本,避免在各依赖声明中硬编码版本号。示例:
<properties>
<spring-boot.version>3.0.13</spring-boot.version>
</properties>
<dependencyManagement> 引入 spring-boot-dependencies BOM 来管理 Spring 生态相关依赖的版本。示例:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
spring-boot-starter:基础启动器spring-boot-starter-web:Web 开发spring-boot-starter-validation:参数校验pom.xml)3.0.133.5.31.4.21.18.24(scope=provided)5.8.225.1.49knife4j-openapi3-jakarta-spring-boot-starter:4.4.0注意:当前 pom.xml 中存在重复声明 spring-boot-starter-validation(出现了两次),建议去重以保持清晰。
<exclusions> 标签排除不需要的传递依赖。示例:
<dependency>
<groupId>com.example</groupId>
<artifactId>example</artifactId>
<exclusions>
<exclusion>
<groupId>org.unwanted</groupId>
<artifactId>unwanted-artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
mvn dependency:tree 分析依赖树,识别冲突。mvn dependency:analyze 检查未使用的依赖。<scope> 限制依赖作用域,如 provided 用于编译时依赖。说明:为降低手动复制属性导致的错误并统一映射规则(例如 Long -> String 的 id 映射),团队可以选择引入映射库(如 MapStruct)以生成高效且可维护的转换代码。此处为可选建议:
pom.xml 中通过 <dependencyManagement> 或 <properties> 约定 MapStruct 及其注解处理器的版本,并在 05-依赖管理规范.md 中记录推荐版本。示例版本:MapStruct 1.5.x(请根据项目的 Spring Boot / Java 版本选择兼容版本)。01-代码风格指南.md 中保留映射示例(手动 copy + 显式 id.toString())作为团队约定。说明:生成正确的 Swagger/OpenAPI 文档依赖于项目中所使用的文档库及其兼容版本(例如 springdoc-openapi 与 Knife4j)。泛型返回类型在文档中不被正确解析,通常靠注解显式声明解决,但依赖版本也会影响行为。建议:
springdoc-openapi 与 knife4j 的版本在依赖管理中统一声明,并记录推荐版本(当前项目使用 knife4j-openapi3-jakarta-spring-boot-starter:4.4.0,请参考与之兼容的 springdoc-openapi 版本)。springdoc-openapi,必要时在配置中通过 OpenApiCustomiser 或 ModelConverters 注册额外模型(additionalModels)以帮助生成器解析自定义类型。示例(pom 片段说明思路,仅供参考):
<!-- 统一在 <properties> 中声明文档组件版本 -->
<properties>
<springdoc.version>1.6.14</springdoc.version>
<knife4j.version>4.4.0</knife4j.version>
</properties>
<!-- 依赖管理区 -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>