2012-02-10 36 views
5

考虑下面的企业应用分层例如:关于创建Maven项目结构的建议 - 多个模块与多个项目?

  1. 项目的服务 - > POJO服务层
  2. 项目的Web - > Web应用程序,取决于 '项目的服务',部署为一个WAR
  3. 项目服务 - > Web服务,取决于'项目服务',作为单独的WAR部署,目前未通过互联网公开
  4. 项目独立 - >克伦乔布斯,取决于'项目服务'

什么是在Maven中组织这种方法的正确方法。我应该创建一个多模块maven项目吗?如果'project-services'是一个Maven模块,是否可以与其他三个项目共享,每个项目都是独立的可部署单元?

在我以前的项目中,我只创建了4个不同的Maven项目,从来没有什么其他需要。

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

回答

2

你实际上可以做任何一种方法。如果它真的是一个大项目,你总是希望同时构建和发布,那么多模块项目就非常适合。您可以设定它像这可能:

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库时,这是一个很好的选择,但是你经常更新战争。

很明显,你可能有混合,所以也许jar是独立的,但你有一个包含两个war文件的多模块项目。 maven的好处在于,它足够灵活,可以处理任何业务案例,这些案例应该如何划分。

0

我肯定会使用单个项目与模块,以确保使用的通用第三方库的版本相匹配。

以POM项目为根,让所有实现和其他工件共享它通常被认为是除单模块项目之外的所有其他应用的良好实践。

1

在我的工作场所,我们有许多共享图书馆的顶级项目(15个顶级项目共享35个左右的图书馆)。我们使用每个库的单个项目方法。今天,当我们必须一次性释放所有这些,这是一场噩梦。

的一些问题,我们面对的:

  • 手动找出依赖
  • 不得不按照正确的顺序运行释放
  • 一次失败停止整个发布

如果我不得不d它一遍又一遍(我帮助设置了所有这一切),我会使用一个多模块项目。如果没有别的,一气呵成发布一切都是一个巨大的优势。在eclipse中这些项目可能看起来不太漂亮,但那不是你应该瞄准的东西。

+0

一个巨大的项目的缺点是,你经常会发布没有任何变化的工件。我理解发行版的问题,也许在你的情况下,你实际上每次发布时都会改变每件神器......在这种情况下,它没有什么麻烦。但有时当你只需要释放一件神器时,将它们全部释放而没有任何变化是不太理想的。 – Michael 2012-02-12 02:10:05

0

既然你有一些模块之间的直接依赖关系,我也建议在多模块项目。

我经常推荐的是考虑模块的生命周期。例如:如果您将释放批处理模块的次数比服务层次要多,那么将它分开是有意义的。所以你不需要发布(部署)没有变化的东西。 由于批处理通常不以.war文件相同的方式部署。但这取决于服务+批处理模块的生命周期。

在大多数情况下,这种移动是并排的。所以+1“为所有人”