Java - Maven - 在客户端和服务器端项目中重用实体层

时间:2018-02-05 19:23:13

标签: java spring maven spring-boot

我正在开发一个Spring Boot,Hibernate,Thymeleaf项目,我对实现重用我的实体层的最佳架构感到有点困惑。

我有2个Maven父项目,我想通过创建一个ProjectEntity来实现以下项目层次结构(在父项中重用它)

  1. ProjectAPIParent

    a)ProjectEntity

    b)ProjectRepository

    c)ProjectAPI

  2. ProjectClientUIParent

    a)ProjectEntity

    b)ProjectClientUI

  3. 问题是一个子项目不能有多个父母。

    现在,我可以选择仅创建一个基本父项目,但问题是听起来不对,因为我希望客户端和服务器端项目之间完全松散耦合。

    在这种情况下,您建议我做什么?

    您的意见很重要。谢谢:))

2 个答案:

答案 0 :(得分:2)

采取这种决定并不是一个惯用的规则。

个人,我选择作为工件的父级,该项目表现出最强的自然所有权关系。

例如,如果ProjectEntity源代码设计为仅由ProjectAPIParent项目的开发人员修改并发布,ProjectAPIParent应该很可能是Maven父级(以及ProjectEntity模块的聚合器pom)。而ProjectClientUIParent应该使用ProjectEntity作为依赖。

但是如果你没有设法清楚地识别出与这个神器拥有这种关系的父项目,你可能不应该让ProjectEntity成为他们中没有一个的孩子。
在这种情况下,使ProjectEntity这两个项目的依赖更有意义。

作为旁注,无论您对父pom的选择如何,您都可以在ProjectEntity和{{}}的聚合器pom.xml中将ProjectAPIParent定义为Maven模块(不与Maven子项混淆) {1}}。

答案 1 :(得分:2)

您可以建立以下内容:

+- ApplicationParent
   +- APIParent
   |  +- ProjectAPI
   |  +- Repository
   +- ClientUIParent
   |  +- ClientUI
   +- Entity

ApplicationParent POM:

<modules>
  <module>APIParent</module>
  <module>ClientUIParent</module>
</modules>

APIParent POM:

<modules>
  <module>../Entity</module>
  <module>Repository</module>
  <module>ProjectAPI</module>
</modules>

ClientUIParent POM:

<modules>
  <module>../Entity</module>
  <module>ClientUI</module>
</modules>

你可以:

  • 整体构建您的应用程序(通过ApplicationParent
  • 单独构建APIParentClientUIParent

    当然,您必须注意APIParentClientUIParent不要在本地同时单独构建。

  • ApplicationParent

  • 中声明所有内容(例如JUnit依赖项)只需一次
  • 使用<dependencyManagment>声明一次
  • 中任何子项目中使用的所有依赖项的依赖项详细信息
  • 仅针对各个POM的某些子项目所需的单独声明