【发布时间】:2011-08-24 06:53:39
【问题描述】:
承认,这听起来并不完全是最佳做法,但让我解释一下。在构建期间,我们需要将构建号和系统版本粘贴到一个类中,该类的唯一目的是包含这些值并使其可访问。
我们的第一个想法是使用系统属性,但由于部署环境的波动性(另一种说法是“系统管理员正在做奇怪的邪恶令人毛骨悚然的事情”),我们希望对它们进行硬编码。
基本上我看到了在 ant 中实现它的 4 种可能性:
-
在类中的令牌上使用
<replace>这种方法的问题是文件被改变了,所以你必须在编译后用
<replaceregexp>替换令牌。太丑了,我不想用正则表达式接触源代码。加上时间依赖性。 -
拷贝文件,对拷贝进行替换,编译拷贝,删除拷贝
必须注意顺序 - 必须先编译原始类才能被副本覆盖。时间依赖性也很丑陋。
-
复制文件,替换原件上的token,编译,用副本替换染色的原件
除非嵌入在编译目标中,否则存在相同的时间依赖性问题。这也很丑陋,因为我们所有的构建文件都使用相同的导入编译目标。
-
在构建脚本中从头开始创建文件/将文件存储在源路径之外
是对前三个的改进,因为没有时间依赖性,但是编译器/IDE 非常不满意,因为它忘记了类。红色标记丑得令人不安。
您对替代方案有何看法?
有没有这方面的最佳实践?
我当然希望我错过了一个完全理智的方法。
谢谢
编辑
我们最终使用清单将内部版本号和系统版本存储在Implementation-Version 属性中,取消MyClass.class.getPackage().getImplementationVersion()。我发现这个解决方案是 this thread 的答案之一,由 andersoj 发表在评论中
【问题讨论】:
-
与我的一个问题有关:stackoverflow.com/questions/690419/…
-
@andersoj:很好的资源,谢谢
标签: java ant build build-process