在从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>=可以使用本地任务,请参阅编辑