Spring boot:子模块依赖

时间:2016-11-29 13:09:21

标签: spring spring-boot

我有多模块弹簧启动应用程序。我以这样的方式组织它:它包含web模块,其中包含@SpringBootApplication类以及由web模块导入的其他几个模块(例如batch-jobs模块)。< / p>

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配置。哪种方法更好?你能在这里提出建议吗?

1 个答案:

答案 0 :(得分:1)

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

我对这个主题的看法是(或者如果我看一下spring boot)来明确命名你在代码中使用的依赖项(以及特定的模块)。但是使用spring boot,你无法真正匹配模块中的依赖项与项目中的初学者相匹配。当然你可能知道,一个starter-web将提供mvc来查看你项目之外的依赖项,但我认为如果项目中其他人很难进入定义 增长并维持它们。

纯粹的推测:如果一个启动器获得更新并丢弃一个依赖关系以支持另一个更新怎么办?举一个例子:vendorA提供的LibX现在切换到vendorB。您仍将在模块配置中对vendorA具有JSON依赖关系,但vendorB也会在您的类路径中获得。如果他们拥有相同的完全限定名称......(bam)

您可以将多个启动器(如持久性相关的启动器)提取到持久性模块,将Web提取到Web等等。