Maven,Git和Jenkins. 为 Web 应用程序和客户端使用者建议的体系结构



我有一个结构如此结构的 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 应用程序配置了Git子模块,因此对于每个子模块,将在 Web 应用程序目录下创建一个相对的项目目录。

这确保了 Jenkins 能够正确编译任何分支,因为 Web 应用程序包含相关子模块的提交哈希

在服务器上部署 Web 应用程序之前,我在 maven 存储库上部署了模型和 ejb 客户端。

这些依赖项由使用 Web 应用 API 的rest 客户端使用。

rest-client 是这样结构化的:

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

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

  1. rest-client 在获取 ejb 客户端和模型依赖项时失败,因为它们都配置了 网络应用程序 ,因此需要 Web 应用程序父 POM。

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

    mvn deploy -N

    以无递归方式部署模块。

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

  2. 有人建议我从 Web 应用程序中删除模型和 ejb-client,并将它们保留为 Web 应用程序依赖项, 但是我对这个想法表示强烈怀疑,因为这两个模块都与Web应用程序相关联,并且Jenkins不会将它们识别为子模块, 因此,最糟糕的是,将父 POM 与其子模块相关联的哈希提交也会丢失。

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

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

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

看看我的这个项目,看看一个工作的例子。

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

最新更新