6

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

  1. 项目服务 -> POJO 服务层
  2. project-web -> Web 应用程序,依赖于“project-services”,部署为 WAR
  3. project-web-services -> Web Services ,依赖于“project-services”,部署为单独的 WAR,当前未通过 Internet 公开
  4. project-standalone -> Cron Jobs,依赖于“project-services”

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

在我以前的项目中,我只是创建了 4 个不同的 Maven 项目,并且从未觉得需要其他任何东西。

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

4

4 回答 4

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 库,但您经常更新 war 时,这是一个不错的选择。

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

于 2012-02-10T12:58:18.277 回答
1

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

我们面临的一些问题:

  • 手动找出依赖关系
  • 必须以正确的顺序运行发布
  • 一次失败会停止整个发布

如果我不得不重新开始(我帮助设置了所有这些),我会使用一个单一的多模块项目。如果不出意外,一次性释放所有内容是一个巨大的优势。这些项目在 Eclipse 中可能看起来不漂亮,但这不是你应该瞄准的目标。

于 2012-02-11T07:27:44.087 回答
0

我当然会使用带有 for 模块的单个项目,以确保使用的常见 3rd 方库的版本匹配。

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

于 2012-02-10T13:06:45.717 回答
0

由于您在模块之间有一些直接的依赖关系,因此我也建议在多模块项目中使用。

我经常推荐的是考虑模块的生命周期。例如:如果您发布批处理模块的频率远高于服务层,那么将其拆分可能是有意义的。所以你不需要发布(部署)没有变化的东西。由于批处理的部署方式通常与 .war 文件不同。但这取决于服务+批处理模块的生命周期。

在大多数情况下,移动并排。所以 +1 表示“一个为所有人”

于 2012-02-15T09:29:42.587 回答