2
$ ant clean compile notexist install

在这里我得到了BUILD FAILED因为notexist不作为目标存在,这是预期的。但是有没有办法忽略或跳过未知目标?或者也许将未知目标映射到已知目标(这对我来说是无操作的)?

背景

我们将 Atlassian Bamboo 用于我们的 CI 服务器,每当我们想在构建中添加 ant 目标时,我们都会冒着破坏旧代码分支的风险。这是因为如果我们通过 CI 运行旧版本,它可能不包含目标,因此会失败。因此,我们只需要编辑build.xml文件,要么使用dependsor <ant>,但这并没有给我们想要的灵活性。

例子

今天我们有:

ant clean selenium.tests

我们想添加一个新目标来测试我们的 REST 服务。目标是rest.tests。因此,我希望我的命令是

ant clean selenium.tests rest.tests

但是对于旧分支,rest.tests还不存在。到目前为止,我们的解决方案是添加rest.tests作为依赖项selenium-tests(因为我们的 build.xml 受版本控制),但这意味着我们不能自己运行selenium.tests

事后看来,我们应该刚刚创建了一个代理目标,例如integration.tests(我们已经test用于单元测试),它将委托给这两个目标。但是除非我原来的问题有解决方案,否则我们甚至不能添加integration.tests到 CI 中。

4

2 回答 2

0

您可能必须以编程方式调用 ant。在通过 Java 以编程方式运行 ANT中讨论

org.apache.tools.ant.Project提供了目标列表和调用它的方式

于 2013-10-08T09:03:01.357 回答
0

我认为没有一种方法可以测试您所称的目标(而不是文件)是否存在。我的建议是:

  1. 您多久构建一次缺少目标的旧版本?如果在 CI 配置中手动注释掉这些调用的情况非常少见?
  2. 你能把你的 CI 调用限制在一个通常会存在的整洁集合中:clean、build、test、dist 等吗?
  3. 您是否需要将 CI 配置拆分为多个作业?如果您确实需要某些版本中不存在的目标,那么您可能拥有完全不同的产品版本,这些版本值得分离到不同的 CI 工作中。那么构建目标不存在的工作就没有意义了。
于 2013-10-08T09:56:43.167 回答