Maven POM继承或聚合或依赖

问题描述 投票:0回答:1
  • 我们的团队每年为公司的各个部门开发大约5个Web应用程序。
  • 应用程序不相关,它们拥有自己的应用服务器,数据库和基于数据库的用户,没有单点登录服务器或通用数据库。
  • 每个新项目,我们重新创建(从以前的项目复制/粘贴)Java和Javascript的常用代码,如用户管理,菜单管理,代码描述,安全性等
  • 根据要求改变外观。
  • 现在我们创建了一个util项目,它有一些常用的方法(如电子邮件,电话号码验证器,Date Time utils,Date Serializer等)
  • 新项目使用util项目作为依赖项。
  • 当我们确定需要新的util方法时,我们将它添加到util项目并发布一个新版本。(util项目有自己的生命周期)。如果需要,其他项目可以升级到新版本的util。

我们的技术堆栈是Spring boot - spring MVC,security,data-JPA&Angular JS&Thymeleaf

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

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

这是选项吗?

  • 创建父项目(使用用户,菜单服务,存储库,实体类等)并继承到其他项目。 (只有父类pom或带有类的父项目)
  • 创建常见的东西作为一个模块和聚合。(如何管理生命周期?)
  • 创建具有自己生命周期的独立maven项目的常见内容,并将其用作依赖项。(客户端脚本会发生什么)

想知道最佳实践。

java maven spring-boot jenkins multi-module
1个回答
0
投票

共享库的第一条规则 - 不要创建共享库。在每个组织的某个时刻,有人试图共享他们在项目之间复制的代码。几年后,它变得无法维持。

除非你能创建一个(至少在理论上)可以开源的高质量图书馆 - 否则你的公司不会有任何好处。

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

  • lib或一组连接的lib通常驻留在单独的项目(存储库)中。
  • lib不应该是项目特定的或公司特定的,它需要非常通用,以便其他组织的人在理论上可以使用它
  • 它应该与开源库看起来一样 - 您只需将其作为另一个依赖项包含在内。
  • 它们无法覆盖从顶部(UI)到底部(后端实体)的功能。每个库都有自己的小任务要完成。如果它是一个UI组件 - 那么它是一个可重用的NPM包,如果它是一个用于常见计算的Java实用程序 - 那么它应该是那个实用程序就是这样。多个包之间的相互连接应该非常有限(如果有的话)。 如果您确实希望共享自上而下的功能,请考虑创建独立应用程序以及服务到服务通信,iframe等的可能性。
  • 不应将Spring语境包含在可重用库中。 Spring是每个独立应用程序的一部分,无法共享。

因此,在创建共享库之前要三思而后行,并准备花费大量时间来维护它。

© www.soinside.com 2019 - 2024. All rights reserved.