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

Tim*_*Tim 9 javascript java ant

我正在定义一个macrodef Ant,并javascript用于完成工作.在这种情况下,我正在验证一个timezone.

<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>
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*Tim 12

结果我使用了错误的标签类型.为了使用脚本来定义一个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>
Run Code Online (Sandbox Code Playgroud)


Reb*_*bse 7

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

<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>
Run Code Online (Sandbox Code Playgroud)

  • 当然,但是使用Ant 1.8> =您可以使用本地任务,请参阅编辑 (3认同)
  • 这是一个好主意,但不幸的是只适用于第一次调用。属性只能在 Ant 中设置一次,因此在第一次运行后,“区域”属性将始终保持相同的值。 (2认同)