9

我有一个包含嵌入式 javascript 的 ant 任务。我想让目标失败或成功基于我在 javascript 中运行的一些逻辑:

<target name="analyze">
    <script language="javascript">
    <![CDATA[
            importClass(java.io.File);
            importClass(java.io.FileReader)
            importClass(java.io.BufferedReader)

            String.prototype.startsWith = function(str) {
                return (this.indexOf(str) === 0);
            }

            String.prototype.endsWith = function(str) {
                var lastIndex = this.lastIndexOf(str);
                return (lastIndex != -1) && (lastIndex + str.length == this.length);
            }

            //setup the source directory
            srcDir = project.getProperty("MY_HOME") + "/foo/src";

            if(srcDir.startsWith("/foo") { 
            //TARGET SHOULD PASS
            } else { 
            //TARGET SHOULD FAIL
            }

    ]]>
    </script>
</target>
4

3 回答 3

9

您可以通过 Exit API 使 Ant 退出,但这会引发构建异常,从而导致堆栈跟踪混乱。最干净的方法是在 javascript 中设置一个属性,然后使用fail任务对其进行测试:

Javascript:

project.setProperty( "javascript.fail.message", "There was a problem" );

Ant,在脚本任务之后:

<fail if="javascript.fail.message" message="${javascript.fail.message}" />
于 2011-07-01T15:36:02.417 回答
3

另一个目标:

<target name="failme"><fail/></target>

脚本:

`project.executeTarget("failme");`

未测试。文档

于 2011-07-01T10:15:21.537 回答
1

您可以在一个 JavaScript 块中完全做到这一点。

    <script language="javascript">
        <![CDATA[
                failTask = project.createTask("fail");
                failTask.setMessage("I have failed");
                failTask.perform();
    ]]>
    </script>
于 2018-08-27T10:53:12.860 回答