-2

重複の可能性:
コマンドライン引数でプログラムを実行するためにAntを使用する

コマンドライン引数としていくつかのファイル名を取得するJavaプログラムを作成しました(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"/>

4

1 に答える 1

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>

これで、2つの新しいパラメーターができました。コマンドラインから次のようにパラメーターを渡すことができfile1ます。file2

$ 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.txtとが使用されますbar.txt。コマンドラインでパラメータを使用して設定されたプロパティは、ファイル自体-Dに設定されたプロパティの値を上書きすることに注意してください。build.xmlプロパティを設定すると、変更することはできません。

于 2012-12-21T19:50:31.013 に答える