ant 构建过程中代码修改的最佳实践

2024-04-01

承认,这听起来完全不像最佳实践,但让我解释一下。在构建过程中,我们需要将内部版本号和系统版本粘贴到一个类中,该类的唯一目的是包含这些值并使其可访问。

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

本质上我认为在 ant 中实现它有 4 种可能性:

  1. use <replace>在类中的令牌上

    这种方法的问题是文件被更改,因此您必须在编译后将令牌替换回<replaceregexp>...太丑了,我不想用正则表达式接触源代码。加上时间依赖性。

  2. 复制文件,在副本上进行替换,编译副本,删除副本

    必须注意顺序 - 必须首先编译原始类才能被副本覆盖。时间依赖性也很丑陋。

  3. 复制文件,替换原始文件上的标记,编译,用副本替换染色的原始文件

    除非嵌入到编译目标中,否则存在相同的时间依赖性问题。这也很丑陋,因为我们所有的构建文件都使用相同的导入编译目标。

  4. 在构建脚本中从头开始创建文件/将文件存储在源路径之外

    比前三个有所改进,因为没有时间依赖性,但编译器/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(使用前将#替换为@)

ant 构建过程中代码修改的最佳实践 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 如何在 Typescript 中创建抽象工厂模式?

    我正在尝试在 Typescript 中实现标准抽象工厂模式 但编译器不合作 这是我的代码的简化版本 abstract class Model class User extends Model abstract class ModelFact
  • 如何取消设置全局变量。

    我有一个id一个项目和一个id客户端的会话是以 JSON 格式传递的 php 会话 这些存储在全局变量中id p and id c所以我可以使用这些 id 进行多次插入和更新选择等 当用户选择另一个项目或更改页面时 我需要取消设置这些变量
  • 如何使用正则表达式来忽略包含特定子字符串的字符串?

    我将如何使用负向后查找 或任何其他方法 正则表达式来忽略包含特定子字符串的字符串 我读过之前的两个 stackoverflow 问题 java 正则表达式用于文件过滤 https stackoverflow com questions 36
  • macports PHP5 的 Pear 安装

    我通过 macports 在 opt local macports 的默认位置安装了 PHP5 pear 没有端口文件 如果我从 pear 站点进行标准 pear 安装 则 pear 应该放置在什么目录位置才能与 PHP 一起使用 虽然cu
  • 我如何知道哪个初始化程序是指定的初始化程序?

    我如何知道哪个初始值设定项是任何类的指定初始值设定项 我猜它是需要最多参数的一个 但有时这可能是不正确的 omz的答案可以更坚定地表述 The Documentation for a Framework classwill指定哪个是指定的初
  • C++:从用户输入调用函数

    在Python中 当我有几个根据用户输入调用的不同函数时 我有一个字典 其中用户输入作为键 函数名称作为值 def x y return y def z y return y functions x x z z print function
  • 可以从 CUDD 管理器中删除变量吗?

    谁能告诉我是否可以安全地从 CUDD 中的管理器中删除变量 例如 我通过以下方式注册两个变量v1 Cudd bddNewVar manager and v2 Cudd bddNewVar manager 我可以删除吗v2来自经理 我认为不可
  • 如何使用分隔符连接 PySpark 中的多个列?

    我有一个pyspark Dataframe 我想加入3个专栏 id column 1 column 2 column 3 1 12 34 67 2 45 78 90 3 23 93 56
  • 如何使用 ConstraintLayout 使视图“wrap_content 但不大于”?

    我连续有 3 个视图 标题 版本和图像视图 用作按钮 标题应该是wrap content但遵守以下规则 版本应该是wrap content 位于标题右侧和图像视图左侧 imageview 具有固定大小 位于父级的右上角 问题是 如果标题太大
  • 如何在 Android Studio (Gradle) 中添加 apache commons 集合

    我正在尝试使用 ListUtils 但是当我运行该应用程序时 我收到此错误 Caused by java lang ClassNotFoundException Didn t find class org apache commons co
  • 流星 mongo 驱动程序可以处理 $each 和 $position 运算符吗?

    我正在开发一个流星应用程序 并使用最新的流星包 我想重新定位 mongo 文档数组中的项目 为了实现这一目标 我 pull将其从数组中取出 然后 push它在特定的index位置根据MongoDB 文档 https docs mongodb
  • 如何在不使用 AutoMapper 的情况下手动映射 DTO?

    我正在学习 C NET Core 并尝试在不使用 AutoMapper 的情况下创建 DTO 映射 因为我正在独自开发一个小项目 并且想在使用额外的包之前了解基础知识 令人惊讶的是我无法在 stackoverflow com 上轻松找到答案
  • Xcode:TEST 与 DEBUG 预处理器宏

    使用单元测试创 建新项目时 Xcode 将测试方案的构建配置设置为 调试 与 运行 方案相同 我应该区分运行 Command R 和测试 Command U 方案吗 即 我是否应该创建一个名为 Test 的新构建配置 向其中添加预处理器宏
  • MySql备份与恢复

    试图了解人们如何进行完整备份 恢复过程 用户定义的数据库模式和数据可以通过 mysqldump 轻松备份 但是主表和数据呢 即 如果服务器完全崩溃 我该如何重建数据库 即包括 Mysql 中的所有设置 这只是转储 导入 informatio
  • jQuery.bind("删除")

    有没有办法在 DOM 元素被删除时运行事件处理程序 我没有在任何地方看到过这个记录 看起来这是可能的 因为 jQuery 能够在元素删除时删除数据和事件 Binding DOMNodeRemoved将允许您检测绑定元素内节点的删除 适用于
  • Android - R 类的问题

    我正在尝试在 Android 中编写一些基本的东西 listView 等 我的问题如下 1 我编写的任何资源 例如 指定 listView 或按钮内容的 xml 文件 都会在 R 类中注册 但当我尝试使用它时 Eclipse 将其标记为错误
  • 为什么在 React 示例中 useRef 初始化为 null?

    In the 官方 React 文档 https reactjs org docs hooks reference html useref以及 我看到的所有例子useRef像这样使用 const ref useRef null 我发现它无需
  • 在WPF中,如果窗口不在屏幕上,如何将其移动到屏幕上?

    如果我有一个窗口 如何确保该窗口永远不会隐藏在屏幕之外 这很重要 因为有时如果用户添加或删除监视器 如果我们记住了之前的位置 窗口可能会永久隐藏在屏幕之外 我在用WPF MVVM 这个答案已经在大规模的现实世界应用中得到了测试 从任何附加属
  • 代码块找不到我的编译器

    好的 所以我下载了 Codeblocks 并且我的计算机上已经有一个 cygwin 终端 我经常使用它来编译和运行 C 程序 但是当我尝试在 CodeBlocks 中构建程序时 它给了我一个错误 The compiler s setup G
  • ant 构建过程中代码修改的最佳实践

    承认 这听起来完全不像最佳实践 但让我解释一下 在构建过程中 我们需要将内部版本号和系统版本粘贴到一个类中 该类的唯一目的是包含这些值并使其可访问 我们的第一个想法是使用系统属性 但由于部署环境的波动性 另一种说法是 系统管理员正在做奇怪