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 构建过程中代码修改的最佳实践 的相关文章

  • Jackson JSON + Java 泛型

    我正在尝试将以下 JSON 反序列化 映射到List
  • Java将字符串解析为double

    如何解析字符串中的这个 Double 00034800 变成 Double 值 最后两位数字实际上是小数点 所以我正在寻找的结果是348 00 是否有这样的格式可以与十进制格式一起使用 Well String s 00034800 doub
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 我们可以有条件地声明 spring bean 吗?

    有没有一种方法可以有条件地声明 Spring bean 例如
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • 设置 TreeSet 的大小

    有没有办法像数组一样对 Java 集合中的 TreeSet 进行大小限制 例如我们在数组中 anArray new int 10 数组具有固定长度 在创建数组时必须指定该长度 A TreeSet当您向其中添加元素时会自动增长 您无法设置其大
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • 如何在 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 构建过程中代码修改的最佳实践

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