gpt4 book ai didi

javascript - 在 Ant 中对后续 Javascript 使用相同的作用域

转载 作者:行者123 更新时间:2023-12-02 15:59:55 25 4
gpt4 key购买 nike

Apache Ant 允许使用描述的脚本 here .

这是一个最小的build.xml,它说明了问题:

<?xml version="1.0"?>
<project name="test" default="test" basedir=".">
<target name="test">
<script language="javascript"><![CDATA[
function echo(msg) {
var echo = project.createTask("echo");
echo.setMessage(msg);
echo.perform();
}
testvar = "ok";
echo("testvar=" + testvar);
]]></script>

<script language="javascript"><![CDATA[
function echo(msg) {
var echo = project.createTask("echo");
echo.setMessage(msg);
echo.perform();
}
echo("testvar=" + testvar);
]]></script>
</target>
</project>

echo("testvar=" + testvar);第二个脚本失败并出现运行时异常,因为 testvar没有在其作用域中定义,表明每次调用的作用域不同。

我想做的是避免必须设置与上面类似的实用函数 function echo(msg)在每个脚本中,但如果没有共享范围,这是不可能的。

最佳答案

要重用功能,请使用 macrodef ,使用 <sequential>...</sequential> 内的任何 ant 任务。要在独立部分之间共享值,请使用 ant api 和 ant 脚本的项目范围,并
创建/覆盖属性/用户属性。

<project>
<macrodef name="foobar">
<attribute name="foo"/>
<attribute name="prop"/>
<attribute name="val"/>
<sequential>
<script language="javascript">
// no project.createTask("echo") needed just use
println('@{foo}');
// create property, property with same name will be overwritten
// if it's a userproperty, means defined via ant -f build.xml -Dkey=value
// create or overwrite it with project.setUserProperty(key, value);
project.setProperty('@{prop}', '@{val}');
</script>
</sequential>
</macrodef>

<foobar foo="yada,yada.." prop="someprop" val="somevalue"/>

<echo>$${someprop} => ${someprop}</echo>

<script language="javascript">
//access some property from project scope
println(project.getProperty('someprop'));
</script>

<!-- use macrodef from script task -->
<script language="javascript">
var macro = project.createTask("foobar");
macro.setDynamicAttribute("foo", "blablabla..");
macro.setDynamicAttribute("prop", "someprop");
macro.setDynamicAttribute("val", "somevalue");
// or macro.perform();
macro.execute();
</script>
</project>

输出:

[script] yada,yada..           
[echo] ${someprop} => somevalue
[script] somevalue
[script] blablabla..

-- 评论后编辑 --
据我所知,没有其他方法可以分享值(value)观等。
当在评论中阅读您的细化要求时,我相信切换到
Gradle是要走的路。可以合并现有的 Ant 脚本等。

关于javascript - 在 Ant 中对后续 Javascript 使用相同的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31283362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com