gpt4 book ai didi

ant - 只要满足条件就执行 Ant 任务

转载 作者:行者123 更新时间:2023-12-03 07:56:37 25 4
gpt4 key购买 nike

仅当满足条件时,我才需要在特定目标内执行 Ant 任务。

我找到了一种在目标级别而不是在任务级别定义条件的方法。我还发现了一个实现 IF task 的贡献。 .

我的问题是,您是否知道通过标准 Ant 任务实现这一目标的任何方法?

更长的解释:我正在尝试启动 Tomcat 服务器,以防它停止。要检测它是否停止,我使用以下代码:

<echo message="Checking whether Tomcat is running"/>
<condition property="tomcat.running">
<socket server="${tomcat.host}" port="${tomcat.port}"/>
</condition>

所以我在这个目标中的下一个任务是一个 exec 任务,只有在 ${tomcat.running} 时才应该执行。是假的。正如我所说,我不想在目标中添加单个任务来使用除非属性。

最佳答案

Ant 目标可以有一个可选的 ifunless条款。这意味着只有在设置了属性时才执行任务,带有 if子句,或者未设置 unless第 1 条。有趣的是,那个ifunless条款被检查 首先执行任何依赖任务。

这意味着,您可以在标准 Ant 中执行此操作,作为仅在满足特定条件时执行 Ant 任务的一种方式:

 <target name="test.if.tomcat.is.running">
<condition property="tomcat.running">
<socket server="${tomcat.host}" port="${tomcat.port}"/>
</condition>
</target>

<target name="my.target"
if="tomcat.running"
depends="test.if.tomcat.is.running">
<yaddah/>
<yaddah/>
<yaddah/>
</target>

您指定希望 Ant 执行 Target my.target . Ant 注意到 my.target取决于 test.if.tomcat.is.running目标,并将首先执行该目标。 test.if.tomcat.is.running任务将设置 tomcat.running属性,如果 Tomcat 实际正在运行。否则,不会设置该属性。

最后,Ant 会回到 my.target瞄准并查看属性 tomcat.running已设置,并且只会执行目标 my.target如果设置了。

或者,您可以使用 Ant-contrib 任务,这可能会使您的整个构建过程更容易理解。

如果你想走 Ant-Contrib 路线,有一个简单的方法来设置 Ant-Contrib,所以 Ant-contrib jar 实际上是你项目的一部分。如果有人从版本控制系统 check out 您的项目,他们还将获得 Ant-contrib jar,因此不必自己安装 Ant-Contrib。

下载 Ant-Contrib jar,并将其放入项目根目录中名为 antlib/ac 的目录中。 . antlib可用于各种可选任务 jar,例如 Findbugs或 PMD。只需将每个可选的 Ant jar 放在自己的目录下 antlib (就像我把 Ant-Contrib 放在 ac 目录下一样)。

然后,在您的 build.xml ,您可以通过以下方式指定 Ant-Contrib 任务:
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${basedir}/antlib/ac"/>
</classpath>
</taskdef>

现在,您可以使用 Ant-Contrib 任务而不必担心它们是否安装在特定机器上。您 checkout 您的项目,并且您可以自动访问这些任务。

1. 没错, if/unless子句检查是否设置了属性而不是 true/ false这会引起很多困惑。我见过开发人员将属性设置为 falseno ,然后想知道为什么自 if 以来目标实际上正在执行子句设置为假。

关于ant - 只要满足条件就执行 Ant 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14562904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com