Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
关于创建Maven项目结构的建议-多模块vs多项目?_Maven_Maven 2_Multi Module - Fatal编程技术网

关于创建Maven项目结构的建议-多模块vs多项目?

关于创建Maven项目结构的建议-多模块vs多项目?,maven,maven-2,multi-module,Maven,Maven 2,Multi Module,考虑以下企业应用程序分层示例: 项目服务->POJO服务层 project web->web应用程序,依赖于“项目服务”,作为WAR部署 project web services->web services依赖于“project services”,作为单独的WAR部署,目前未在internet上公开 项目独立->Cron作业,取决于“项目服务” 在Maven中组织这项工作的正确方法是什么。我应该创建一个多模块maven项目吗?如果“项目服务”是一个Maven模块,那么它是否可以与其他三个项目共

考虑以下企业应用程序分层示例:

  • 项目服务->POJO服务层
  • project web->web应用程序,依赖于“项目服务”,作为WAR部署
  • project web services->web services依赖于“project services”,作为单独的WAR部署,目前未在internet上公开
  • 项目独立->Cron作业,取决于“项目服务”
  • 在Maven中组织这项工作的正确方法是什么。我应该创建一个多模块maven项目吗?如果“项目服务”是一个Maven模块,那么它是否可以与其他三个项目共享,每个项目都是一个独立的可部署单元

    在我以前的项目中,我只创建了4个不同的Maven项目,从来没有觉得需要其他任何东西


    想验证是否有比我之前所做的更好的方法。

    实际上,您可以使用任何一种方法。如果它真的是一个大项目,您总是希望同时构建和发布,那么多模块项目是一个很好的选择。您可能会这样设置:

    pom project (top level project that would define all of the modules)
      jar project (project-services)
      war project (project-web)
      war project (project-web-services)
      project-standalone (wasn't sure if this was a jar, or just some scripts, etc)
    
    因此,您只需构建和发布根项目,它将为您处理所有子模块。它们可以相互依赖(只是要小心循环依赖)。而且你几乎已经准备好要走了

    另一个选项是完全分离工件。好处是有一个不同的发布周期。当您有一个不经常更改的jar库,但您经常更新war时,这是一个很好的选择


    显然,您可以混合使用jar,因此jar可能是独立的,但是您有一个包含两个war文件的多模块项目。maven的好处是,它足够灵活,可以处理任何业务案例,以确定如何划分这些业务案例。

    我当然会选择一个带有for模块的项目,以确保常用第三方库的使用版本匹配


    将POM项目作为根项目,并让所有实现和其他工件共享,这通常被认为是除单模块项目外的所有项目的良好实践。

    在我的工作场所,我们有许多顶级项目共享库(15个顶级项目共享35个左右的库)。我们采用每个库一个项目的方法。今天,当我们不得不一次释放所有这些文件时,这是一场噩梦

    我们面临的一些问题:

    • 手动计算依赖项
    • 必须以正确的顺序运行发布
    • 一次失败将停止整个发布

    如果我必须重新设计它(我帮助设置了所有这些),我将使用一个多模块项目。如果没有别的,一次性发布所有内容是一个巨大的优势。在eclipse中,这些项目可能看起来并不漂亮,但无论如何,这不是您应该追求的目标。

    因为在多模块项目中,模块之间有一些直接的依赖关系,我也建议您这样做

    我经常推荐的是考虑模块的生命周期。例如:如果要比服务层更频繁地发布批处理模块,那么将其拆分可能是有意义的。因此,您不需要发布(部署)没有更改的内容。 因为批处理的部署方式通常与.war文件不同。但这取决于服务+批处理模块的生命周期


    在大多数情况下,移动是并排的。因此,对于“一对所有人”来说+1

    一个大型项目的缺点是,您经常发布没有任何更改的工件。我理解发布的问题,也许在你的情况下,你每次发布的时候都会改变每一个工件,这样就不那么麻烦了。但有时,当您只需要释放一个工件时,不做任何更改就释放它们是不理想的。