我的程序获取命令行参数。当我使用Ant时如何传递它?
答案 0 :(得分:71)
扩展Richard Cook的答案。
这是运行任何程序的ant
任务(包括但不限于Java程序):
<target name="run">
<exec executable="name-of-executable">
<arg value="${arg0}"/>
<arg value="${arg1}"/>
</exec>
</target>
以下是从.jar
文件运行Java程序的任务:
<target name="run-java">
<java jar="path for jar">
<arg value="${arg0}"/>
<arg value="${arg1}"/>
</java>
</target>
您可以从命令行调用,如下所示:
ant -Darg0=Hello -Darg1=World run
确保使用-Darg
语法;如果你跑了这个:
ant run arg0 arg1
然后ant
会尝试投放定位arg0
和arg1
。
答案 1 :(得分:27)
如果您不想为每个可能的参数处理单独的属性,我建议您使用:
<arg line="${args}"/>
您可以检查属性是否未使用具有unless
属性的特定目标进行设置,并且在内部执行:
<input message="Type the desired command line arguments:" addProperty="args"/>
全部放在一起给出了:
<target name="run" depends="compile, input-runargs" description="run the project">
<!-- You can use exec here, depending on your needs -->
<java classname="Main">
<arg line="${args}"/>
</java>
</target>
<target name="input-runargs" unless="args" description="prompts for command line arguments if necessary">
<input addProperty="args" message="Type the desired command line arguments:"/>
</target>
您可以按如下方式使用它:
ant
ant run
ant run -Dargs='--help'
前两个命令将提示输入命令行参数,而后者则不会。
答案 2 :(得分:11)
将参数传递给构建的唯一有效机制是使用Java属性:
ant -Done=1 -Dtwo=2
以下示例演示了如何检查并确保将预期参数传递到脚本
<project name="check" default="build">
<condition property="params.set">
<and>
<isset property="one"/>
<isset property="two"/>
</and>
</condition>
<target name="check">
<fail unless="params.set">
Must specify the parameters: one, two
</fail>
</target>
<target name="build" depends="check">
<echo>
one = ${one}
two = ${two}
</echo>
</target>
</project>
答案 3 :(得分:4)
你能更具体地了解一下你正在尝试做什么以及你是如何做的吗?
如果您尝试使用<exec>
任务调用该程序,则可以执行以下操作:
<exec executable="name-of-executable">
<arg value="arg0"/>
<arg value="arg1"/>
</exec>
答案 4 :(得分:0)
我最后做的是创建一个批处理文件从ant文件中提取CLASSPATH,然后使用这个直接运行java:
在我的build.xml中:
<target name="printclasspath">
<pathconvert property="classpathProp" refid="project.class.path"/>
<echo>${classpathProp}</echo>
</target>
在另一个名为'run.sh'的脚本中:
export CLASSPATH=$(ant -q printclasspath | grep echo | cut -d \ -f 7):build
java "$@"
它不再是跨平台的,但至少它相对容易使用,并且可以提供与run.sh相同的.bat文件。这是一个非常短的批处理脚本。这不像将整个构建迁移到特定于平台的批处理文件。
我觉得很遗憾,在蚂蚁中没有一些选项,你可以这样做:
ant -- arg1 arg2 arg3
mpirun使用这种语法;我认为ssh也可以使用这种语法。