Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Maven-在客户端和服务器端项目中重用实体层_Java_Spring_Maven_Spring Boot - Fatal编程技术网

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

Java-Maven-在客户端和服务器端项目中重用实体层,java,spring,maven,spring-boot,Java,Spring,Maven,Spring Boot,我正在从事一个Spring Boot、Hibernate、Thymeleaf项目,我对实现重用实体层的最佳体系结构感到有点困惑 我有两个Maven父项目,我想通过创建一个ProjectEntity(在两个父项目中重用它)来实现下面的项目层次结构 项目家长 a) 项目实体 b) 项目存储库 c) ProjectAPI ProjectClientUIParent a) 项目实体 b) ProjectClientUI 问题是一个子项目不能有多个父项目 现在,我可以选择只创建一个基本父项目,但问题是它听

我正在从事一个Spring Boot、Hibernate、Thymeleaf项目,我对实现重用实体层的最佳体系结构感到有点困惑

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

  • 项目家长

    a) 项目实体

    b) 项目存储库

    c) ProjectAPI

  • ProjectClientUIParent

    a) 项目实体

    b) ProjectClientUI

  • 问题是一个子项目不能有多个父项目

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

    在这种情况下,你建议我怎么办


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

    做出这样的决定并没有一个惯用的规则

    就我个人而言,我选择了一个人工制品的父项目,该项目体现了与客户最强烈的自然所有权关系

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

    但是,如果您无法清楚地识别与此工件具有这种关系的父项目,那么您可能不应该将
    ProjectEntity
    作为它们的子项目。
    在这种情况下,将
    ProjectEntity
    作为这两个项目的依赖项更有意义



    作为旁注,无论您对父pom的选择如何,您都可以在
    projectapiporent
    ProjectClientUIParent
    的aggregator pom.xml中将
    ProjectEntity
    定义为Maven模块(以避免与Maven子模块混淆),您可以建立以下内容:

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

    <modules>
      <module>APIParent</module>
      <module>ClientUIParent</module>
    </modules>
    
    <modules>
      <module>../Entity</module>
      <module>Repository</module>
      <module>ProjectAPI</module>
    </modules>
    
    <modules>
      <module>../Entity</module>
      <module>ClientUI</module>
    </modules>
    
    ClientUIParent
    POM:

    <modules>
      <module>APIParent</module>
      <module>ClientUIParent</module>
    </modules>
    
    <modules>
      <module>../Entity</module>
      <module>Repository</module>
      <module>ProjectAPI</module>
    </modules>
    
    <modules>
      <module>../Entity</module>
      <module>ClientUI</module>
    </modules>
    
    
    ../实体
    客户端
    
    你可以:

    • 作为一个整体构建应用程序(通过
      ApplicationParent

    • 分别构建
      apiporent
      ClientUIParent

      当然,您必须注意,
      APIParent
      ClientUIParent
      不能在本地同时单独构建

    • ApplicationParent

    • 用于为任何子项目中使用的所有依赖项声明一次依赖项详细信息

    • 某些子项目仅在各个POM中需要单独声明


    使
    ProjectEntity
    成为一个库并在两者中都使用它不是一个选项?使其成为一个库很难维护,因为每次更改此项目的代码后,我都必须为该项目单独运行maven package或maven install命令。我明白了,也许使用像詹金斯这样的工具可以帮助你。对我来说是有意义的。等待更多的答案,也许这会改变我的看法。你是对的。其他观点可能会很有趣。*Re“源代码设计为仅通过”–一个(通常)构建如何修改源代码(除了资源过滤或类似的内容)?@Gerold Broser你是对的。现在还不清楚。“由
    projectAPRIPARENT
    project的开发人员编写”更清楚。谢谢,非常感谢。您的回答很有趣,对于我们希望集成到单个根目录中的模块很有意义。但OP希望避免两个大项目之间的耦合:“现在,我可以选择只创建一个基本父项目,但问题是这听起来不正确,因为我希望客户端和服务器端项目之间完全松散耦合。”@davidxxx我更多地从源代码本身及其相互依赖性而不是从构建环境中了解松耦合这个术语。但是,
    APIParent
    ClientUIParent
    是(非常)松散耦合的。事实上,它们根本不耦合。它们是单独的项目。他们中没有一个人知道关于其他人的任何事情——构建方面(除了问题中没有说明的可能的依赖项)。只有他们的共同父级
    ApplicationParent
    知道这两个。应该是这样的,不是吗?我需要理解一件不清楚的事情。
    ApplicationParent
    模块既是聚合器又是父pom吗?正如您所说:“只需在
    ApplicationParent
    中声明一次对所有人(例如JUnit)通用的东西”,这意味着
    ApplicationParent
    两者都是。在这种情况下,它会产生更强的耦合。@davidxxx是的,两者都有(因此POM中的
    )。我想我知道你的意思。您是否将其与Java的类层次结构进行比较,在Java的类层次结构中,超类甚至不知道子类的存在?这不是一个开发环境,而是一个构建环境。如果聚合器
    ApplicationParent
    不知道应用程序的组件,那么您如何构建整个应用程序?谢谢,Gerold,我从您的回答中学到了很多。我赞成你的答案。