将命令行参数传递给在exec中使用它们的目标

时间:2012-07-11 00:00:41

标签: ant

ant bootstrap arg1 arg2 arg3

我需要回显“arg1 arg2 arg3”,以便我可以使用这些参数调用程序

在网上搜索以下内容应该有效,但不是。

 <target name="bootstrap">
     <echo>${arg0} ${arg1} ${arg2} </echo>
     <!--exec executable="cmd">
        <arg value="${arg0}"/>
        <arg value="${arg1}"/>
        <arg value="${arg2}"/>
     </exec-->
 </target>

还有关于用户传递5个args或1个arg的内容的任何想法。我需要失败它没有正确数量的args。

1 个答案:

答案 0 :(得分:34)

没有

您不能以这种方式传递将在构建文件中使用的参数。当您尝试调用以下目标ant bootstrap arg1 arg2 arg3bootstraparg1arg2时,arg3将会得到解决 - 显然,只有目标bootstrap存在。

如果您确实要传递将在构建文件中使用的参数,则需要使用-DpropertyName=value格式。例如:

ant bootstrap -Darg1=value1 -Darg2=value2 -Darg3=value3

对于其他方式,您可以在构建文件中编写嵌入脚本(如beanshell或javascript,使用ant的脚本支持库),首先处理参数。例如,您可以通过以下方式传递参数:

ant bootstrap -Dargs=value1,value2,value3,...

现在你有了一个名为args的属性,其值为“value1,value2,value3,...”(对于......我的意思是用户可以键入3个以上的值)。您可以使用beanshell将args分割为arg1arg2arg3 ,,并进行一些检查......

<script language="beanshell" classpathref="classpath-that-includes-the-beanshell-lib">
    String[] args = project.getProperty("args").split(",");
    project.setUserProperty("arg1", args[0].trim());
    project.setUserProperty("arg2", args[1].trim());
    project.setUserProperty("arg3", args[2].trim());
</script>
相关问题