Maven POM继承,聚合或依赖性


  • 我们的团队每年为各种大约开发5个网络应用程序我们公司的部门。
  • 应用程序无关,他们拥有自己的应用程序服务器,数据库和基于数据库的用户,没有单个登录服务器或公共数据库。
  • 每个新项目,我们都会重新创建(从一个先前的项目中复制/粘贴)Java&JavaScript的常见代码,例如用户管理,菜单管理,代码说明,安全等
  • 根据需求改变外观和感觉。
  • 现在我们创建了一个UTIT项目,该项目有一些常见方法(例如电子邮件,电话号码验证器,日期时间utils,日期序列化器等)
  • 新项目将UTIL Project用作依赖性。
  • 当我们确定对新UTIT方法的需求时,我们将其添加到util项目并发布新版本。(UTIT项目拥有自己的生活循环)。如果需要,其他项目可以升级到新版本的UTIT。

我们的技术堆栈是Spring Boot -Spring MVC,安全性,Data -JPA&Angular JS&胸腺

现在,我想避免为每个项目重新创建常见的东西(用户,菜单代码描述等)。

我对多模块Maven项目没有实践知识,因此无法决定什么是最佳实践。

这是选项吗?

  • 创建父级项目(使用用户,菜单的服务,存储库,实体类等)并继承到其他项目中。(只有类的父pom或parent project)
  • 创建一个通用的东西作为一个模块和汇总。(如何管理生命周期?)
  • 创建常见的东西,作为独立的Maven项目生命周期并将其用作依赖性。(客户端脚本将会发生什么)

想知道最佳实践。

共享库的第一个规则 - 请勿创建共享库。在每个组织中的某个时候,有人试图共享他们从项目到项目复制的代码。几年后,无法维持。

除非您可以创建一个(至少在理论上)开源的高质量库 - 您将不会对公司有任何好处。

如果您确实想创建一个高质量的可重复使用库,那么这里有一些规则:

  • 一组LIB或一组连接的LIB通常位于单独的项目(存储库)中。
  • LIB不应该是特定于项目的或特定于公司的,它必须是相当通用的,以便其他组织的人们可以使用它可以使用它
  • 它应该看起来与开源库相同 - 您只将其包括在另一个依赖项中。
  • 它们无法涵盖从顶部(UI)到底部(后端实体)的功能。每个图书馆都有自己的小任务要完成。如果是UI组件 - 那么它是可重复使用的NPM软件包,如果是通用计算的Java实用程序,则应该是该实用程序,仅此而已。多个软件包之间的连接应非常有限(如果有)。
    • 如果您 do 想要共享一个上下的功能,请考虑创建独立的应用程序以及服务到服务通信的可能性,iframes,等等。
  • 不应将春季上下文不应包含在可重复使用的库中。春季是每个独立应用程序的一部分,无法共享。

因此,在创建共享的lib之前三思而后行,并准备花费很多时间来维持它。

最新更新