加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在ant构建期间进行代码修改的最佳实践

发布时间:2020-12-14 16:46:20 所属栏目:Java 来源:网络整理
导读:承认,这听起来并不是最佳做法,但让我解释一下.在构建期间,我们需要将构建号和系统版本粘贴到一个类中,该类的唯一目的是包含这些值并使它们可访问. 我们的第一个想法是使用系统属性,但由于部署环境的波动性(另一种说法是“系统管理员正在做奇怪的邪恶的令人毛
承认,这听起来并不是最佳做法,但让我解释一下.在构建期间,我们需要将构建号和系统版本粘贴到一个类中,该类的唯一目的是包含这些值并使它们可访问.

我们的第一个想法是使用系统属性,但由于部署环境的波动性(另一种说法是“系统管理员正在做奇怪的邪恶的令人毛骨悚然的东西”),我们希望对它们进行硬编码.

基本上我看到了在蚂蚁中实现它的4种可能性:

>使用< replace>在班上的一个令牌上

这种方法的问题是文件被更改,所以你必须在编译后用< replaceregexp>替换令牌…… sooo丑陋,我不想用正则表达式来触摸源代码.加上时间依赖性.
>复制文件,复制副本,编译副本,删除副本

一个人必须记住序列 – 必须先编译原始类才能被副本覆盖.时间依赖性也很难看.
>复制文件,替换原件上的令牌,编译,用副本替换染色的原件

除非嵌入在编译目标中,否则相同的时间依赖性问这也是丑陋的,因为我们所有的构建文件都使用相同的导入编译目标.
>在构建脚本中从头开始创建文件/将文件存储在源路径之外

由于没有时间依赖性,因此对前三个进行了改进,但编译器/ IDE非常不满意,因为它忽略了类.红色标记令人不安地丑陋.

您对替代方案有何看法?

对此有什么最佳做法吗?

我当然希望我错过了一个完美的方法.

谢谢

编辑
我们最终使用清单将构建号和系统版本存储在Implementation-Version属性中,取消了MyClass.class.getPackage().getImplementationVersion().我发现这个解决方案是 this thread的答案之一,由andersoj发表评论

解决方法

我认为更简单的方法是让您的Version.java类从JAR中包含的简单.properties文件中读取,并在Ant构建中的构建时生成此.properties文件.例如,只需生成:
build.number = 142
build.timestamp = 5/12/2011 12:31

built-in <buildnumber> task in Ant已经完成了一半(见第二个例子).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读