【问题标题】:In an Ant build script, how do you check for the existence of a file or directory as a dependency for a task?在 Ant 构建脚本中,如何检查文件或目录是否存在作为任务的依赖项?
【发布时间】:2011-06-23 14:08:30
【问题描述】:

开始编写我的第一个构建脚本。我没有得到整个依赖的东西。当您的编译说 java 并且您需要目标文件来创建 jar 时,这种意义是有意义的。但是,如果您只是想验证任何不属于编译任务的文件或目录是否存在呢?

我已经能够使用 available,但我不知道如何将其结果用作任务的依赖项

【问题讨论】:

    标签: ant build dependencies


    【解决方案1】:

    这样的:

    <project name="foo-bar" basedir=".">
        <target name="bar" depends="foo" unless="isAvailable">
         <echo message="file is not available" />
        </target>
    
        <target name="foo">
          <available file="${basedir}/path/to/file.java" property="isAvailable"/>
        </target>
    </project>
    
    • “bar”目标取决于“foo”目标。
    • 当“foo”被执行时,它会检查文件是否存在。
    • 如果存在,它会设置isAvailable 属性。
    • “bar”目标只有在未设置isAvailable 时才会执行并回显消息。

    您还可以将&lt;available&gt; 放在构建的“根级别”(在目标之外,作为&lt;project&gt; 的直接子级,它将在运行任何目标之前进行评估:

    <project name="foo" basedir=".">
    
        <available file="${basedir}/path/to/file.java" property="isAvailable"/>
    
         <target name="bar" unless="isAvailable">
         <echo message="file is not available" />
        </target>
    </project>
    

    【讨论】:

    • 这很好,但你如何在真/假意义上使用它?如果 isAvailable 为假怎么办?
    • 只有文件存在时才会设置该属性(true)。如果该属性未设置 (false),则不会触发 unless 条件。如果您想为值显式设置“true”和“false”,您可以使用available 属性进行控制,但您需要检查您使用的是哪个版本的 ANT。旧版本不检查属性的值,它们只评估它是否设置为真/假,因此如果属性设置为“false”值,它将满足 true() 条件。我相信较新版本的 ANT 会将“false”识别为 false()。
    【解决方案2】:

    如果要测试文件是否存在,请查看available

    【讨论】:

    • 但是一旦你使用了available并将一个属性设置为true,你如何使用它作为目标的依赖?
    • 阅读ant.apache.org/manual/targets.html :“如果(或除非)设置了属性,目标也可以执行其执行”
    猜你喜欢
    • 2014-04-13
    • 2011-04-24
    • 2015-10-18
    • 1970-01-01
    • 2018-12-08
    • 2013-07-08
    • 1970-01-01
    • 2011-04-29
    • 2012-06-04
    相关资源
    最近更新 更多