我正在运行的java程序有2个强制命令行参数和一个可选的第三个参数。这是我目前的build.xml:
<project name="HashTest" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="HashTest" value="com.HashTest.HashTest"/>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/HashTest.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${HashTest}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/HashTest.jar" fork="true">
<arg value="${data}"/>
<arg value="${loadfactor}"/>
<arg value="${debug}"/>
</java>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/>
</project>
这会强制用户输入3个参数。我尝试添加另一个运行目标,只定义了2个args但是ant并不喜欢它。我知道我可以创建两个单独命名的运行目标,一个有2个args,另一个有3个但是我想尽可能避免这个,为了简单起见。
我希望用户只需输入:
ant -Ddata=<num> -DloadFactor=<num> -Ddebug=<num>
或:
ant -Ddata=<num> -DloadFactor=<num>
答案 0 :(得分:1)
假设您可以为每个属性提供默认值,您可以在build.xml
中定义它们,然后在调用ant
时仅覆盖您要提供的属性:
<project name="HashTest" basedir="." default="main">
...
<!-- default values for each properties -->
<property name="data" value="0"/>
<property name="loadFactor" value="0"/>
<property name="debug" value="1"/>
...
</project>
以下命令行:
ant -Ddata=1 -DloadFactor=10 -Ddebug=0
将使用参数1,10和0调用您的java程序。以下是:
ant -DloadFactor=3
将使用参数0,3和1调用它(使用data
和debug
参数的默认值)。
答案 1 :(得分:1)
如果您至少使用Ant 1.9.1,则可以使用ant:if
or ant:unless
to have optional arguments。
首先,将if
和unless
命名空间添加到您的<project>
元素...
<project name="tryit"
xmlns:if="ant:if"
xmlns:unless="ant:unless"
>
...然后将if:set
添加到嵌套在<arg>
下的<java>
元素...
<arg value="${debug}" if:set="debug"/>