Xml 阿帕奇蚂蚁赢了';我不会做数学
我正在使用分布式源代码处理Java中的一个项目,为了正常工作,必须使用自定义Ant脚本构建源代码。问题是,当我运行脚本时,我得到Xml 阿帕奇蚂蚁赢了';我不会做数学,xml,ant,build-automation,Xml,Ant,Build Automation,我正在使用分布式源代码处理Java中的一个项目,为了正常工作,必须使用自定义Ant脚本构建源代码。问题是,当我运行脚本时,我得到 BUILD FAILED C:\[path]\autobuild.xml:47: Only 1 operation can be specified 第47-59行改为: <math result="months" datatype="int"> <op op="-"> <op op="+">
BUILD FAILED
C:\[path]\autobuild.xml:47: Only 1 operation can be specified
第47-59行改为:
<math result="months" datatype="int">
<op op="-">
<op op="+">
<num value="${month}"/>
<op op="*">
<num value="${year}"/>
<num value="12"/>
</op >
</op>
<num value="24097"/>
</op>
</math>
我试着用谷歌搜索这个错误短语,唯一的结果是,如果操作为null,就会出现这种情况。我尝试按照以下方式更改代码:
<op type="-">
或
但这些都产生了同样的错误。我改为:
<subtract>
现在没有错误,但结果总是零。
我还尝试将数学节简化为只有一个操作:
<math result="months" datatype="int">
<op op="subtract">
<num value="27940"/>
<num value="24123"/>
</op>
</math>
但问题依然存在
我完全不知所措。有人知道这里发生了什么吗?我正在使用最新版本的Ant${month}和${year}设置正确(我也用硬编码的数字进行了测试,但仍然不起作用)
谢谢 您可以使用诸如或之类的嵌入式脚本语言,它可能比XML更可读、更易于操作
<groovy>
month = Integer.valueOf(properties["month"])
year = Integer.valueOf(properties["year"])
properties["months"] = 24097 - ((year * 12) + month)
</groovy>
月=整数.valueOf(属性[“月”])
年份=整数.valueOf(属性[“年份])
物业[“月”]=24097-((年*12)+月)
我对这段代码也有同样的问题。有趣的是,大多数情况下,它确实有效。大约每5次运行构建脚本时,就会发生一次错误
<math datatype="int" result="rndNum">
<op op="+">
<num value="42000" />
<op op="*">
<num value="1000"/>
<op op="random"/>
</op>
</op>
</math>
我从数学任务中删除了datatype属性,并将其放在第一个op中
<math result="rndNum">
<op datatype="int" op="+">
<num value="42000" />
<op op="*">
<num value="1000"/>
<op op="random"/>
</op>
</op>
</math>
到目前为止,它是有效的。让我们看看需要多长时间:)如果答案不起作用,我将删除它。您不需要额外的ant任务或脚本语言,只需使用java附带的内置javascript脚本引擎(自jdk 1.6以来,Sun自己基于rhino 1.6R2的实现)并为resuse添加宏定义,即:
<project>
<property name="foo" value="22"/>
<echo>$${foo} => ${foo}</echo>
<!-- create macrodef -->
<macrodef name="math">
<attribute name="operation"/>
<attribute name="operator1"/>
<attribute name="operator2"/>
<attribute name="result"/>
<sequential>
<script language="javascript">
tmp = 0;
switch ("@{operation}")
{
case "+" :
tmp = parseInt("@{operator1}") + parseInt("@{operator2}");
break;
case "-" :
tmp = parseInt("@{operator1}") - parseInt("@{operator2}");
break;
case "*" :
tmp = parseInt("@{operator1}") * parseInt("@{operator2}");
break;
case "/" :
tmp = parseInt("@{operator1}") / parseInt("@{operator2}");
break;
}
project.setProperty("@{result}", tmp);
</script>
</sequential>
</macrodef>
<!-- create new properties -->
<math operation="/" operator1="${foo}" operator2="11" result="foooo"/>
<math operation="+" operator1="${foo}" operator2="21" result="fooo"/>
<!-- overwrite existing property foo -->
<math operation="+" operator1="${foo}" operator2="1" result="foo"/>
<echo>
create => $${fooo} => ${fooo}
create => $${foooo} => ${foooo}
overwrite => $${foo} => ${foo}
</echo>
</project>
如何部署这样一个用ant编写的程序?如果有一个编译、测试和分发我在ant中用groovy编写的程序的构建系统……上面的示例使用ant groovy任务。没有什么需要编译的,而且它比xml中的数学更容易阅读、维护和测试……只需根据ANT官方手册中的ANT依赖项列表将jar文件放在类路径中。这很有效,尽管我不得不将groovy的前两行改为
Integer.valueOf(properties[“month”])
。。。我希望有一个修复程序可以让我继续使用其他人正在使用的build.xml文件。。。因为如果他们改变了什么呢?这是一个正在进行的项目。谢谢。如果我在一天内没有得到另一个答案,我会接受这个答案。您使用的java运行时版本是什么?
<project>
<property name="foo" value="22"/>
<echo>$${foo} => ${foo}</echo>
<!-- create macrodef -->
<macrodef name="math">
<attribute name="operation"/>
<attribute name="operator1"/>
<attribute name="operator2"/>
<attribute name="result"/>
<sequential>
<script language="javascript">
tmp = 0;
switch ("@{operation}")
{
case "+" :
tmp = parseInt("@{operator1}") + parseInt("@{operator2}");
break;
case "-" :
tmp = parseInt("@{operator1}") - parseInt("@{operator2}");
break;
case "*" :
tmp = parseInt("@{operator1}") * parseInt("@{operator2}");
break;
case "/" :
tmp = parseInt("@{operator1}") / parseInt("@{operator2}");
break;
}
project.setProperty("@{result}", tmp);
</script>
</sequential>
</macrodef>
<!-- create new properties -->
<math operation="/" operator1="${foo}" operator2="11" result="foooo"/>
<math operation="+" operator1="${foo}" operator2="21" result="fooo"/>
<!-- overwrite existing property foo -->
<math operation="+" operator1="${foo}" operator2="1" result="foo"/>
<echo>
create => $${fooo} => ${fooo}
create => $${foooo} => ${foooo}
overwrite => $${foo} => ${foo}
</echo>
</project>
project.setUserProperty()