【发布时间】: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)
现在我对上述结构有一些问题:
-
rest-client 无法获取 ejb-client 和模型依赖项,因为它们都配置了 网络应用 ,因此需要 web-app 父 pom。
我采用的唯一解决方案是 仅部署父 pom 与
mvn deploy -N以非递归方式部署模块。
有没有办法直接在 pom 上指定?
有人建议我从 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