我目前正在尝试找到一个合适的工作流程来跨多个 Maven 项目执行重构,但我找不到任何令人满意的解决方案。
假设有三个项目。一个名为common的项目和两个名为app1和app2的依赖项目。每个都在一个单独的 Git 存储库中。
现在假设一个名为 StringUtils.trim() 的通用方法应重命名为 StringUtils.getTrimed()。因为app1和app2使用了这种方法,所以这些项目也需要进行调整。
现在,问题是,向开发团队提供这种修改的正确工作流程是什么。鉴于这种情况:一个由大约 10 名开发人员组成的团队,拥有一个中央 SCM 服务器和一个中央 Maven 存储库服务器来托管工件。
可能的工作流程:
只需将更改提交到 SCM(对于所有三个项目)--> 问题:例如,在app1上工作的开发人员可能没有检出项目公共,而是使用来自中央工件服务器的二进制文件。当他们从 SCM获取最新版本的app1时,他们的构建将中断。坏的!
除了 1,将app1的依赖项更改为指向common的 SNAPSHOT 版本。--> 问题:当在app1上工作的开发人员从 SCM 获取最新版本时,如果更新策略设置为DAILY(这是默认设置),他们可能不会获得common的最新 SNAPSHOT。坏的!
除了 2,将 SNAPSHOTS 的更新策略更改为ALWAYS。--> 问题:现在,app1的开发人员将获得common的最新 SNAPSHOT,一切都很好,但前提是在我提交对app1的更改之前将 SNAPSHOT 部署到工件服务器!此外,在将公共项目部署到工件服务器和我将app1提交到 SCM之间有一段时间。如果开发人员获取common的最新 SNAPSHOT ,它将与 SCM 中app1的当前版本不兼容,因为我还没有提交对app1的更改。坏的!
我能想出的唯一可行的解决方案是跳过 SNAPSHOT 机制并使用版本。这是工作流程:
- 在我的机器上本地更改三个项目后(在任何提交之前),将common的版本从 1.0 增加到 1.1。
- commit common to SCM 并将其部署到工件服务器。
- 只有在部署完成后,将app1和app2中的依赖关系更改为指向新版本的common并提交app1和app2。
这种方法的问题:我必须做版本管理,所以这只能与整个团队协调并考虑所有依赖项目来完成。此外,我必须等待公共项目部署到工件服务器,然后才能提交对app1和app2的更改。
是不是有什么简单灵活的机制,如何进行这样的重构呢?我希望有人能帮助我。也许我这边也有一些误解。