Java,主命令行参数和Ant构建文件

时间:2012-12-21 14:21:18

标签: java ant

  

可能重复:
  Use Ant for running program with command line arguments

我编写了一个java程序,它将命令行参数作为几个文件名(输入到main的String[] args数组中)。 现在我需要编写一个Ant构建文件。 我该如何制作这个命令:

ant run SampleFile1.txt SampleFile2.txt ...

获取这些参数并将它们传递给我的主要文件?

这是我的示例Ant文件:

<?xml version="1.0" ?>
<project name="MyProgram" 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="main-class"  value="MyProgram.MainClass"/>

<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}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>

            </manifest>

        </jar>
    </target>

    <target name="run" depends="jar">
        <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
//now when I run it here, I want it to get the arguments I input when I do ant run. for example: ant run file1.txt, file2.txt <- I want those to go to my String[] args of the main 
        </java>
    </target>

    <target name="clean-build" depends="clean,jar"/>

    <target name="main" depends="clean,run"/>

1 个答案:

答案 0 :(得分:3)

这是<java>任务的一些变化:

<target name="run" depends="jar">
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
        <arg value="${file1}"/>
        <arg value="${file2}"/>
    </java>
</target>

现在,您有两个新参数:file1file2您可以从命令行传递这些参数:

$ ant -Dfile1=foo.txt-Dfile2=bar.txt run

Ant获取目标列表,并且您正在执行目标运行-D参数是您传递给程序的属性。

我建议您将默认参数放在程序中,如下所示:

<target name="run" depends="jar">
    <property name="file1" value="bar.txt"/>
    <property name="file2" value="foo.txt"/>
    <java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
        <args value="${file1}"/>
        <args value="${file2}"/>
    </java>
</target>

这样,如果您没有传递任何参数,它将使用您的默认参数foo.txtbar.txt。请记住,使用-D参数在命令行上设置的属性会覆盖build.xml文件本身中设置的属性的值。设置属性后,永远不会更改。