java - 如何处理微服务字中的编译时间常数?
问题描述
前段时间,我们将单体应用模块化为许多小组件。它们中的每一个都存储在专用的 git 存储库中,并由不同的团队独立进行版本控制/发布
我们遇到了我们在很多地方定义的公共静态最终常量被其他模块使用的问题。这意味着当您构建依赖模块时,它会将常量值编译为其字节码
我们的模块软件包交付给具有运行生产(最后一个稳定里程碑)和质量(新实现的功能,需要在投入生产之前进行测试)环境的客户
为了简化和说明问题,假设我们在生产环境中交付并运行了以下模块
| Module | version |
| A | 1.1.0 |
| B | 1.2.0 |
| Common | 1.0.0 |
我们在 Common 模块中定义了一个 public staic final 常量,A 和 B 都在使用它们
在当前的 sprint 中,我们修改了模块 A 和 Common(我们正在更新其中的一个常量)。模块 A 和 common 被重新编译并发布,因此客户将收到包安装程序:
| Module | version |
| A | 1.2.0 |
| B | 1.2.0 |
| Common | 1.1.0 |
这将导致模块 B 已在上一个 sprint 中更新的常量的字节码旧值中编译的问题
如果我们决定重新编译模块 B:
如何从 Common 模块中检测所有使用公共常量的模块(我们有数百个由许多不同的团队开发)
如果没有对其进行Java代码更改,我们是否应该增加模块B的版本?
如果我们决定重建 B 并保持相同的版本,那么当我们需要为生产版本提供错误修复时,我们会遇到问题,这将只需要更改 A - 模块 B 将交付从上一个 sprint 编译的常量值,这不应该被包括在内,因为我们正在交付旧版本的 Common
我是否从错误的角度解决了这个问题,因为没有解决方案似乎 100% 解决了问题,或者需要付出很多努力才能实现?
在此先感谢您的任何建议
解决方案
推荐阅读
- asp.net-core - 如何在 Web API 中同时支持 json 和 urlencoded 内容类型
- database - 将 OSM 数据迁移到 PostGreSQL 时如何使用 hstore 扩展类型?
- r - 如何使用 R igraph 访问给定最短路径中的已访问顶点
- javascript - 通过 @ViewChild 在视图中调用组件上的方法到 QueryList
- r - 如何使用基于用户输入的函数创建数据框?
- python - 愚蠢的问题:有没有办法让每 X 个 LED 重复一个颜色模式?还是我必须写出灯条中每个 LED 的图案?
- fluentd - Fluentd 日志源
- typescript - 如何从Typescript中相同json对象结构的另一个数组更新数组中的json对象值
- javascript - 获取组件中的查询字符串
- python - 有没有更好的方法来编写这个递归函数?