web-dev-qa-db-ja.com

コマンドライン引数を使用してプログラムを実行するためにAntを使用する

私のプログラムはコマンドライン引数を取得しています。 Antを使用するときにどのように渡すことができますか?

55
Victoria Seniuk

拡張 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を実行しようとします。

71
emory

可能な引数ごとに個別のプロパティを処理したくない場合は、以下を使用することをお勧めします。

<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つのコマンドはコマンドライン引数を要求しますが、後者は要求しません。

28
ofavre

パラメーターをビルドに渡すための唯一の効果的なメカニズムは、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>
11
Mark O'Connor

あなたがやろうとしていることと、それをやろうとしている方法についてもう少し具体的にできますか?

<exec>タスクを使用してプログラムを呼び出そうとしている場合は、次のことを実行できます。

<exec executable="name-of-executable">
  <arg value="arg0"/>
  <arg value="arg1"/>
</exec>
4
Richard Cook

最後に行ったのは、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もこの構文を使用できます。

0
Hugh Perkins