Ant ターゲットには、オプションのiforunless節を含めることができます。これは、プロパティが句で設定されているか、句で設定解除されている場合にのみタスクを実行することを意味しifます1。興味深いことに、そのor句は、依存タスクが最初に実行された後にチェックされます。unlessifunless
つまり、特定の条件が満たされた場合にのみ Ant タスクを実行する方法として、標準の Ant でこれを行うことができます。
<target name="test.if.tomcat.is.running">
<condition property="tomcat.running">
<socket server="${tomcat.host}" port="${tomcat.port}"/>
</condition>
</target>
<target name="my.target"
if="tomcat.running"
depends="test.if.tomcat.is.running">
<yaddah/>
<yaddah/>
<yaddah/>
</target>
Ant に Target を実行させることを指定しますmy.target。Antはターゲットにmy.target依存することを認識し、それを最初に実行します。Tomcat が実際に実行されている場合、タスクはプロパティtest.if.tomcat.is.runningをtest.if.tomcat.is.running設定します。tomcat.runningそれ以外の場合、そのプロパティは設定されません。
最後に、Ant はターゲットに戻りmy.target、プロパティtomcat.runningが設定されているかどうかを確認し、設定されている場合にのみターゲットを実行しmy.targetます。
または、Ant-contrib タスクを使用して、ビルド プロセス全体を理解しやすくすることもできます。
Ant-Contrib ルートに行きたい場合は、Ant-Contrib をセットアップする簡単な方法があるため、Ant-contrib jar は実際にはプロジェクトの一部です。誰かがバージョン管理システムからプロジェクトをチェックアウトすると、Ant-contrib jar も取得されるため、Ant-Contrib を自分でインストールする必要はありません。
Ant-Contrib jar をダウンロードし、プロジェクトのルートにある というディレクトリに配置しますantlib/ac。Findbugsや PMDantlibなど、あらゆる種類のオプションのタスク jar に使用できます。オプションの Ant jar をそれぞれ独自のディレクトリの下に配置するだけです(ディレクトリの下に Ant-Contrib を配置したように)。antlibac
次に、 でbuild.xml、Ant-Contrib タスクを次のように指定します。
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${basedir}/antlib/ac"/>
</classpath>
</taskdef>
これで、特定のマシンにインストールされているかどうかを気にすることなく、Ant-Contrib タスクを使用できます。プロジェクトをチェックアウトすると、それらのタスクに自動的にアクセスできます。
1.そうです、if/unless句はプロパティが設定されているかどうかをチェックし、true/ではなくfalse、多くの混乱を引き起こす可能性があります。false開発者がプロパティをorに設定しているのを見たことがありますが、句が false に設定されているnoため、ターゲットが実際に実行されているのはなぜだろうかと考えています。if