1

build.xml私はその中に3つのターゲットを持つこのantファイルを持っています:

target1target2およびtarget3

ユーザーが単純に実行antし、明示的なant target1ものなどではない場合は、どのターゲットに電話をかけたいかをユーザーに尋ねます。

実行中にターゲットを明示的に呼び出さない場合にのみ、ユーザーにこれを求めるプロンプトが表示されることを忘れないでくださいant

4

2 に答える 2

4

Antはプログラミング言語ではなく、依存関係マトリックス言語です。2つの間に大きな違いがあります。

プログラム言語では、シーケンスの絶対順序を指定できます。さらに、物事を行う上ではるかに柔軟性があります。Antでは、実行順序を指定しません。このステップを構築するためのさまざまな短い方法を指定してから、それらの依存関係を指定します。Antは、必要な実行順序を自動的に把握します。

これは、開発者がAntについて学ぶのが最も難しいことの1つです。開発者が実行順序を強制しようとして、同じターゲットのセットを何十回も何度も実行してしまうことを何度も目にしました。最近、ビルドに10分近くかかった彼女のビルドがあり、build.xml2分以内に同じビルドを作成するように書き直しました。

を使用<input/>してユーザー入力を取得してから、<exec>またはを使用<java>して別のAntプロセスを実行し、要求されたターゲットを実行できます。ただし、これはAntが機能すると想定されている方法を壊します。

デフォルトのターゲットは、開発者がプロ​​グラミング中に定期的に実行したいデフォルトのターゲットである必要があります。ビルドをクリーンアップするべきではありません。10分間のテストは実行しないでください。変更されたファイルをコンパイルし、warまたはjarを再構築する必要があります。それが私が99%の確率で望んでいることです。全体のプロセスは10秒かかります。

誰かがこれを理解していないとき、私は本当に、本当に腹を立てます。入力するのが嫌いでant、ビルドの実行方法についての指示があります。デフォルトのターゲットが以前のコンパイルをクリーンアップすると、私は本当にイライラします。そして、何かを求められたら、いまいましいビルドファイルを書いた人を大きな鈍いオブジェクトで殴りたいという致命的な欲求に満ちています。これは、Antを実行し、ビルドが行われている間に何か他のことを行い、ビルドが完了したと思ったらそのコマンドウィンドウに戻るためです。ビルドに戻って、ビルドがそこに座っていることを確認して、どのターゲットを指定するかを教えてくれるのを待っていることに腹を立てることはありません。

あなたが本当に、本当にこれをする必要があるなら。と呼ばれるシェルスクリプトを使用しますbuild.shbuild.xml開発に影響を与えるので、これを行うのに煩わされないでください。

あなたが本当にする必要があるのは、Antの使い方をみんなに教えることです。

  • を入力すると、Antはユーザーの実行可能ターゲットを一覧表示しますant -p。これにより、すべてのターゲットとその説明が一覧表示されます。ターゲットに説明がない場合、ターゲットはリストされません。これは、ユーザーが自分で実行してはならない内部ターゲットに最適です。(たとえば、別のターゲットを実行する必要があるかどうかを確認するために、ある種のテストを実行するだけのターゲット)。これを機能させるには、ターゲットに説明があることを確認してください。Antファイルを書いた人が、私が望まないマイナーなターゲットの説明を書いたが、私が望むターゲットの説明(コンパイルなど)を忘れると、私は腹を立てます。デビッドを怒らせないでください。あなたはデビッドを怒らせたくありません。
  • グループのデフォルトのターゲット名を使用します。そうすれば、 vs。vs . BUILDvs. build-programsvs.を使用する1つのプロジェクトではなく、プロジェクト全体でどのターゲットが何をするかがわかります。Mavenライフサイクル名の名前を標準化しました。それらは文書化されており、議論や議論はありません。Compilebuild-my-stuffStuffBuild
  • <ant/>ビルド順序を使用または<antcall>強制しないでください。build.xmlを12の別々のbuild.xmlプログラムに分割しないでください。これらはすべて、ターゲット依存関係マトリックスを構築するAntの機能を壊す可能性があります。さらに、ビルドで依存関係の階層を表示し、複数のビルドファイル間で機能できない多くのAntツール。
  • ビルドをシェルスクリプト内にラップしないでください。これを行うと、ビルドがどのように機能するかを理解していない可能性があります。
  • ビルドは、私がチェックアウトした作業ディレクトリ内のファイルを更新しないはずです。あらゆる種類のビルドアーティファクトがいたるところに散らばっていて、作業ディレクトリを汚してはいけません。作業ディレクトリの外では何も実行しないはずです(ある種のデプロイを実行する場合を除きますが、デプロイターゲットを実行する場合のみ)。実際、すべてのビルド処理は、作業ディレクトリ内のサブディレクトリで実行する必要があります。Acleanは、この1つのディレクトリを削除するだけです。時々、これはbuild、時々と呼ばれdistます。targetMavenの命名規則を採用しているので、私は通常これを呼び出します。
  • ビルドスクリプトはビルドスクリプトである必要があります。チェックアウトや更新を行うべきではありません-少なくとも自動的には。CruiseControlを継続的ビルドプロセスとして使用する場合は、build.xml内に更新およびチェックアウト機能が必要であることを私は知っています。これが、私が現在Jenkinsを使用している理由の1つです。

この答えが必ずしもあなたが探しているものであるとは限らないことについて申し訳ありません。Antで何をしているのか実際には述べていません。ビルドを実行している場合は、実行しようとしていることを実行しないでください。ある種のプログラムを作成している場合は、Antではなく実際のプログラミング言語を使用してください。

Antビルドは通常1〜2分以内に完了し、ファイルを変更したためにビルドをやり直すのに30秒以上かかることはありません。開発者にAntを使用してビルドし、Jenkinsサーバーが使用するのと同じターゲットを使用するように勧めたいので、これを理解することが重要です。そうすれば、私のJenkinsサーバーが公式ビルドを実行するのと同じ方法でビルドをテストできます。

于 2013-02-01T15:59:56.090 に答える
0

inputantが提供するタスクを使用して、それをデフォルトのターゲットにすることができます。

<input
message="Please enter Target ID (1,2 or 3):"
validargs="1,2,3"
addproperty="targetID"
/>

このプロパティの値を使用して、実行するターゲットを決定します。

アリのドキュメントから:

message:ビルドの実行中にユーザーに表示されるメッセージ。

validargs:有効な入力引数を含むカンマ区切りの文字列。設定されている場合、入力タスクはここで定義されていない入力を拒否します。必要に応じて、任意の引数を渡すことができます。

addproperty:input.Behaviourから作成されるプロパティの名前は、プロパティタスクと同じです。つまり、既存のプロパティをオーバーライドすることはできません。

于 2013-02-01T13:22:05.793 に答える