【问题标题】:Spring boot: submodule dependencySpring Boot:子模块依赖
【发布时间】:2025-11-29 11:10:02
【问题描述】:

我有多模块 Spring Boot 应用程序。我以这样的方式组织它,它包含具有@SpringBootApplication 类的web 模块和web 模块正在导入的其他几个模块(例如batch-jobs 模块)。

web 模块包含来自 Spring Boot 的所有依赖项:

compile('org.springframework.boot:spring-boot-starter-batch')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-integration')
...
providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
testCompile('org.springframework.boot:spring-boot-starter-test')
etc...

我想知道是否应该将所有 spring-boot-starter 依赖项都包含到这个模块中,或者最好像这里一样拥有 pure spring 依赖项:

dependencies {
  compile 'org.springframework:spring-core'
  compile 'org.springframework:spring-context'
  compile 'org.springframework.integration:spring-integration-java-dsl'
  compile 'org.springframework.batch:spring-batch-core'
  ...
  testCompile 'org.springframework:spring-test'
  testCompile 'org.springframework.integration:spring-integration-test'
}

无论如何,这些依赖项都是从上面的dependency-management 配置中获取的。哪种方法更好?可以在这里给个建议吗?

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    我认为这篇文章将被标记为基于意见,但无论如何:

    我对这个主题的想法是(或者如果我查看 Spring Boot)明确命名您在代码中积极使用的依赖项(以及特定模块)。但是使用 Spring Boot,您无法真正匹配模块中的依赖项与“项目”中的启动程序。当然,您可能知道 starter-web 将通过查看项目外部的依赖项来提供 mvc,但我认为如果该项目其他人很难进入定义 生长和维护它们。

    纯粹的推测:如果一个初学者获得更新并放弃依赖以支持另一个怎么办?举个例子:vendorA提供的LibX现在切换到vendorB了。您仍然会在模块配置中对 vendorA 有 JSON 依赖,但 vendorB 也会进入您的类路径。如果它们具有相同的完全限定名称...(bam)

    您可以提取几个启动器,例如持久性相关的持久性模块和网络到网络等。

    【讨论】:

    • 是的。关于缺少依赖项,您是对的,但无论如何我会在更新 Spring Boot 版本时检查构建功能。