承认,这听起来完全不像最佳实践,但让我解释一下。在构建过程中,我们需要将内部版本号和系统版本粘贴到一个类中,该类的唯一目的是包含这些值并使其可访问。
我们的第一个想法是使用系统属性,但由于部署环境的波动性(另一种说法是“系统管理员正在做奇怪、邪恶、令人毛骨悚然的事情”),我们希望对它们进行硬编码。
本质上我认为在 ant 中实现它有 4 种可能性:
-
use <replace>
在类中的令牌上
这种方法的问题是文件被更改,因此您必须在编译后将令牌替换回<replaceregexp>
...太丑了,我不想用正则表达式接触源代码。加上时间依赖性。
-
复制文件,在副本上进行替换,编译副本,删除副本
必须注意顺序 - 必须首先编译原始类才能被副本覆盖。时间依赖性也很丑陋。
-
复制文件,替换原始文件上的标记,编译,用副本替换染色的原始文件
除非嵌入到编译目标中,否则存在相同的时间依赖性问题。这也很丑陋,因为我们所有的构建文件都使用相同的导入编译目标。
-
在构建脚本中从头开始创建文件/将文件存储在源路径之外
比前三个有所改进,因为没有时间依赖性,但编译器/IDE 非常不满意,因为它忽略了该类。红色标记丑陋得令人不安。
您对替代方案有何看法?
有这方面的最佳实践吗?
我当然希望我错过了一个完全理智的方法。
谢谢
EDIT我们最终使用清单将内部版本号和系统版本存储在Implementation-Version
属性,无声MyClass.class.getPackage().getImplementationVersion()
。我发现这个解决方案是答案之一 这个线程 https://stackoverflow.com/questions/690419/build-and-version-numbering-for-java-projects-ant-cvs-hudson,这是在安徒生的评论中发布的
我认为一个更简单的方法是让你Version.java
类从 JAR 中包含的简单 .properties 文件读取,并在 Ant 构建中的构建时生成此 .properties 文件。例如只需生成:
build.number = 142
build.timestamp = 5/12/2011 12:31
The 内置<buildnumber>Ant 中的任务 http://ant.apache.org/manual/Tasks/buildnumber.html已经完成了一半(参见第二个示例)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)