【问题标题】:Best practices with Maven dependency management for submodules子模块的 Maven 依赖管理的最佳实践
【发布时间】:2015-07-10 18:21:27
【问题描述】:

我们正在为移动应用程序构建测试自动化框架,我们使用 Maven 作为构建工具和依赖管理。

描述:到目前为止,我们已经有大约 25 个移动应用程序,我们正在计划以下 maven 项目结构,其中我们有框架模块和包含自动化框架代码的通用模块,这些代码将在所有应用程序中使用移动应用程序模块。

问题:随着移动应用程序数量的增加,我觉得下面选择的 maven 项目结构将难以维护,因为许多人将独立工作以自动化不同的移动应用程序,但他们需要检查所有移动应用程序模块,以便添加/编辑任何特定模块。

+-- root (pom type)
       +--- mobile app1 (jar type)
       +--- mobile app2 (jar type)
       .
       .      
       +--- mobile app25 (jar type)
       +--- framework module (jar type)
       +--- Commmon module (jar type)

解决方案:我们考虑构建一个包含框架和通用模块的框架jar,所有移动应用程序都将依赖于框架jar。这里的问题是我们需要确保所有开发人员都使用相同的框架 jar,并且框架中的任何更改都会对其依赖产生影响。同样,每个模块都应该单独更新。

请就我们的框架和依赖模块使用更多可重用性和更少维护性的最佳方法提出建议。

【问题讨论】:

  • 那些移动App1...25是否相互独立? framework 和 common 是那些 app1..25 应用程序使用的代码库。
  • 是的。所有移动应用程序都是独立的,框架和公共包含代码库和所有移动应用程序使用的一些常用功能,例如登录和注销步骤。

标签: java maven mobile automation


【解决方案1】:

根据应用程序独立的信息,您决定的设置没有意义。使每个应用程序成为一个单独的项目(git 存储库)并定义对库的适当依赖项(公共资源等)。

【讨论】:

    【解决方案2】:

    如果您想确保每个移动应用程序都使用相同的框架和通用模块,则需要采用多模块方法。使用${project.version} 对框架和公共的依赖项。

    不过,我建议使用您提出的“解决方法”。它有几个优点:

    • 正如您所提到的,开发人员只需检查他们实际正在处理的代码。
    • 只要您在(私有)Maven 存储库中提供工件,他们就不需要自己编译框架和通用模块。
    • 框架和通用模块开发人员无需担心一旦更改代码就会破坏移动应用程序。他们构建新版本的工件并告诉每个移动应用程序开发人员更新依赖项。移动应用开发者负责让他的移动应用与新框架和通用模块一起工作。

    【讨论】:

    • 感谢您的快速响应和建议。如果我们采用“解决方法”方法,我只是在想我们如何在 Jenkins 中运行所有移动应用程序测试.. 会不会像我们一样为每个应用程序创建单独的作业并独立安排它们?还是我们有其他最好的方法?
    • 是的,我会这样做:为每个应用程序创建单独的作业,然后根据 SCM 提交自动运行它们。如果只更改一个应用程序,则无需构建每个应用程序。
    • 从“解决方法”的方法来看,我相信随着框架中的每一次更改更新依赖项将再次涉及到努力。但是从上面提到的 maven 结构中,我可以看到所有应该跨模块进行的更改,我们可以确定所有开发的测试脚本都与框架同步。
    • 我认为多模块方法的问题在于:如果开发人员更改了框架或公共模块中的某些内容,他还必须确保每个应用程序仍然可以编译并且所有测试都运行良好.否则整个项目将处于无法使用的状态。使用这种变通方法,移动应用程序的开发人员将不得不手动将依赖项更新到 framework 和 common,然后才能修复所有编译错误和测试失败。
    猜你喜欢
    • 2015-07-29
    • 2022-08-09
    • 1970-01-01
    • 2015-03-10
    • 2012-07-19
    • 2021-11-03
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多