Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在从Ant运行的javascript中,如何获得参数值?_Java_Javascript_Ant - Fatal编程技术网

在从Ant运行的javascript中,如何获得参数值?

在从Ant运行的javascript中,如何获得参数值?,java,javascript,ant,Java,Javascript,Ant,我正在Ant中定义一个宏定义,并使用javascript来完成这项工作。在本例中,我正在验证一个时区 <macrodef name="validateTimeZone"> <attribute name="zone" /> <sequential> <echo>result: ${envTZResult}</echo> <echo> validating timezone:

我正在
Ant
中定义一个宏定义,并使用
javascript
来完成这项工作。在本例中,我正在验证一个
时区

<macrodef name="validateTimeZone">
    <attribute name="zone" />
    <sequential>
        <echo>result: ${envTZResult}</echo>
        <echo>  validating timezone: @{zone}</echo>
        <script language="javascript"><![CDATA[
            importClass(java.util.TimeZone);
            importClass(java.util.Arrays);
            var tz = project.getProperty("zone");
            println("    got attribute: " + tz);
            var result = Arrays.asList(TimeZone.getAvailableIDs()).contains(tz); //testing if timezone is known
            project.setProperty("zoneIsValid", result);
        ]]> 
        </script>
    </sequential>
</macrodef>

结果:${envTZResult}
正在验证时区:@{zone}

问题是
project.getProperty()
无法检索传递的属性值。有人知道如何从javascript中获取属性值吗

最好是创建属性为值的属性,即

<macrodef name="validateTimeZone">
    <attribute name="zone" />
    <sequential>
        <echo>result: ${envTZResult}</echo>
        <echo>  validating timezone: @{zone}</echo>
        <!-- edit use local with ant 1.8.x -->
        <local name="zone"/>
        <property name="zone" value="@{zone}"/>
        <script language="javascript"><![CDATA[
            importClass(java.util.TimeZone);
            importClass(java.util.Arrays);
            var tz = project.getProperty("zone");
            println("    got attribute: " + tz);
            var result = Arrays.asList(TimeZone.getAvailableIDs()).contains(tz); //testing if timezone is known
            project.setProperty("zoneIsValid", result);
        ]]> 
        </script>
    </sequential>
</macrodef>

结果:${envTZResult}
正在验证时区:@{zone}

结果表明我使用了错误的标签类型。为了使用脚本定义ant任务,我应该使用
scriptdef
而不是
macrodef
。使用
scriptdef
可以使用预定义对象访问任务中的属性和嵌套元素

这适用于从Ant中的javascript访问属性:

<scriptdef name="validateTimeZone" language="javascript">
    <attribute name="zone" />
    <![CDATA[
        importClass(java.util.TimeZone);
        importClass(java.util.Arrays);
        var tz = attributes.get("zone"); //get attribute defined for scriptdef
        println("    got attribute: " + tz);
        var result = Arrays.asList(TimeZone.getAvailableIDs()).contains(tz); //testing if timezone is known
        project.setProperty("zoneIsValid", result);
    ]]> 
</scriptdef>


这可能会有所帮助:-请看一半的示例。这是一个好主意,但不幸的是,它只适用于第一次调用。属性只能在Ant中设置一次,因此在第一次运行后,“zone”属性将始终保持相同的值。当然可以,但使用Ant 1.8>=可以使用本地任务,请参阅编辑