【问题标题】:Maven, Git and Jenkins.. suggested architecture for web-app and client consumer [closed]Maven、Git 和 Jenkins .. 为网络应用程序和客户端消费者建议的架构 [关闭]
【发布时间】:2018-05-18 07:59:58
【问题描述】:

我有一个如此结构化的 J2EE Web 应用程序:

web-app (parent)
    - ejb (module)
    - war (module)
    - model (module) (distribuited on the maven repository)
    - ejb-client (module) (distribuited on the maven repository)

web-app 配置了 git 子模块,因此对于每个子模块,都会在 web-app 目录下创建一个相对项目目录。

这确保 Jenkins 能够正确编译任何分支,因为 web-app 包含相关子模块的 commit hash

在服务器上部署 web-app 之前,我在 maven 存储库上部署了模型和 ejb-client。

这些依赖项由使用 Web 应用 API 的rest-client 使用。

rest-client 是这样结构化的:

rest-client
    - ejb-client (dependency)
    - model (dependency)

现在我对上述结构有一些问题:

  1. rest-client 无法获取 ejb-client 和模型依赖项,因为它们都配置了 网络应用 ,因此需要 web-app 父 pom。

    我采用的唯一解决方案是 仅部署父 pom

    mvn deploy -N

    以非递归方式部署模块。

    有没有办法直接在 pom 上指定?

  2. 有人建议我从 web-app 中删除模型和 ejb-client 并将它们保留为 web-app 依赖项, 但是我对这个想法非常怀疑,因为这两个模块都与 web-app 相关联,而 Jenkins 不会将它们识别为子模块, 所以最糟糕的是,将父 pom 与其子模块相关联的哈希提交会丢失。

一般来说,您对实际结构有何看法?这是正确的还是应该进行一些更改?

【问题讨论】:

  • 我建议将模型和 ejb-client 作为模块保留在您的多模块构建中,并且不要将它们分布在不同的 git 存储库中,这样您就可以通过 mvn package 一次性构建整个应用程序你不需要做诸如只部署父级......等的事情。
  • 第一个断言(mvn包)为真,第二个断言为假,其余客户端仍然无法获取依赖项,因为模型和ejb客户端都配置了父pom
  • 如果您不将工件部署到存储库管理器或使用本地缓存作为依赖项(包括 pom)的存储,您将无法使用它...最好是使用存储库管理器并在 webapp 上执行mvn deploy,然后您可以在其余客户端中使用依赖项等...
  • 部署一个完整的 web 应用程序是一个不好的做法,你必须只为消费者分发接口
  • webapp 没有部署在系统上吗?我敢打赌它会是这样,所以我没有看到任何“不良做法”......关于那个......

标签: git maven jenkins software-design


【解决方案1】:

在这样的项目中,我通常有一个带有三个子模块的父 pom:server(在您的情况下为 web-app)、commonclientserver 模块包含所有特定于服务器且客户端不需要的逻辑。 common 模块包含服务器和客户端共有的所有逻辑,最后,client 模块包含客户端逻辑。这样,server 模块和client 模块都可以依赖于common 模块。

显然,每个模块又可以有多个子模块。

看看我的this project 看看一个工作示例。

编辑:如果您只有一个父 pom,则需要部署所有内容才能使架构正常工作。为了避免部署 Web 应用程序,您可以做的是将公共模块和客户端模块放在一个多模块构建中,并将 Web 应用程序模块提取到不同的父 pom.xml 中。然后,Web 应用程序可以声明对公共模块的依赖关系。

【讨论】:

  • 这对我来说没问题,但是如果客户端和普通用户使用父 pom(如您的项目),由于普通和客户端依赖性,使用客户端的第三个应用程序应该需要父 pom。看一下主要问题的第 1 期 :)
  • 请看我编辑的答案
  • 所以你的建议是创建 2 个主要模块,一个用于 web 应用程序(ejb 和 rest),一个用于共享部分(common 和 client)对吧?
  • 是的,我就是这个意思。
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 2015-09-24
  • 2013-05-08
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多