使用 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
.
轻松控制您的通用配置
我有两个项目包含许多不同服务和 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
.