承认,这听起来并不是最佳做法,但让我解释一下.在构建期间,我们需要将构建号和系统版本粘贴到一个类中,该类的唯一目的是包含这些值并使它们可访问.
我们的第一个想法是使用系统属性,但由于部署环境的波动性(另一种说法是“系统管理员正在做奇怪的邪恶的令人毛骨悚然的东西”),我们希望对它们进行硬编码.
基本上我看到了在蚂蚁中实现它的4种可能性:
>使用< replace>在班上的一个令牌上
这种方法的问题是文件被更改,所以你必须在编译后用< replaceregexp>替换令牌…… sooo丑陋,我不想用正则表达式来触摸源代码.加上时间依赖性.
>复制文件,复制副本,编译副本,删除副本
一个人必须记住序列 – 必须先编译原始类才能被副本覆盖.时间依赖性也很难看.
>复制文件,替换原件上的令牌,编译,用副本替换染色的原件
除非嵌入在编译目标中,否则相同的时间依赖性问这也是丑陋的,因为我们所有的构建文件都使用相同的导入编译目标.
>在构建脚本中从头开始创建文件/将文件存储在源路径之外
由于没有时间依赖性,因此对前三个进行了改进,但编译器/ IDE非常不满意,因为它忽略了类.红色标记令人不安地丑陋.
您对替代方案有何看法?
对此有什么最佳做法吗?
我当然希望我错过了一个完美的方法.
谢谢
编辑
我们最终使用清单将构建号和系统版本存储在Implementation-Version属性中,取消了MyClass.class.getPackage().getImplementationVersion().我发现这个解决方案是 this thread的答案之一,由andersoj发表评论