【发布时间】:2022-01-10 01:27:09
【问题描述】:
我有一个 springboot 项目,我们通过使用各种适当的 spring-boot-starter jar 来引入我们需要的适当的传递依赖项,从而快速进行。现在,随着我们接近生产发布,我们正在添加代码质量和代码检查工具以收紧松散的末端。其中一些将启动器 jar 标记为有问题,但我发现关于如何处理问题的建议不一致。
Spring.io 文档未能对此进行权衡。此处描述了启动器:Spring Starters,但实际上只是说它们用于“快速启动”,但并不表示它们旨在用于生产。启动器未列在“生产就绪”功能(专注于执行器)中。 Packaging for Production 没有提到首发。仅从 Spring 文档中,我们就鼓励您使用启动器(以便快速上手),但不会被告知在生产环境中使用它们。
如果 spring 项目添加了gradle-lint plugin,或者使用了maven-dependency-plugin,则使用启动器标记问题。启动器本身不包含任何代码,但它们引入了有用的传递依赖项(通过设计),但这与 lint 插件相反。相关incident here
来自gradle-lint 通常,应用程序仅使用此类系列中包含的库的子集。该系列中包含的不必要的依赖项都增加了应用程序本身的占用空间。如果“应用程序”本身就是一个库,那么这些不必要的依赖项会向下游泄露给用户,从而增加他们的足迹并可能引入破坏性的版本冲突解决问题。
在上线之前删除启动器罐子是“正确”的答案吗?是否应该在生产中使用启动器?我确信有很多项目已经开始生产,而且可能他们已经成功地做到了。但在我看来,当局在做什么方面存在分歧,因此希望调和它们。
【问题讨论】:
标签: spring-boot gradle lint maven-dependency-plugin