使用 Spring Boot 构建的公共服务的 Pom 结构

Pom structure for common services built with Spring Boot

我有两个项目包含许多不同服务和 Web 应用程序的可重用代码,例如 CommonService 和 CommonWeb。

我希望我的所有服务项目都尽可能多地重用公共服务中的 pom 配置,但我仍然想利用公共项目中的 spring 启动启动器 poms 来帮助设置它们。组织 pom 层次结构的最佳方式是什么?

CommonService 和 CommonWeb 都有代码、依赖项和插件,就像 AspectJ 编译器一样。我的 AppService 会将 CommonService 添加为依赖项还是父项?

我们通过继承自 Spring 引导父项的公共父项解决了这个问题。这个共同的父项将是每个项目的父项。这对于微服务架构特别方便。

如果您有不同类型的项目,例如HTTP 与消息服务,您可以拥有 POM 父级的继承层次结构,其中根始终是 Spring 引导父级。

如果您不喜欢父 POM 的继承层次结构,我建议分析 Spring Boot 项目,它们是如何组织 POM 的。它非常聪明,但如果您没有很多不同类型的 services/projects,则可能有点矫枉过正。

当然,这些 POM 需要进行适当的版本控制,并作为独立的工件部署到某个工件存储库中。

因为 Maven parent POM 必须在 pom 包装中。

除了像这样的 CommonService 和 CommonWeb 项目之外,您还应该有一个 CommonParent maven 项目:

common (maven aggregate project)
  +- common-service (module with `jar` packaging)
  +- common-web     (module with `jar` packaging)
  \- common-parent  (module with `pom` packaging,
                    and dependent on common-service, common-web)

然后您只需将所有项目的 POM 设为 common-parent 的 child。


此外,您应该自己编写AutoConfiguration 类,并使用Spring Boot提供的@ConfigurationProperites封装来构造您自己的应用程序属性。这样下游项目就可以通过设置 属性 如 common.web.feature1.enabled = false.

轻松控制您的通用配置