ビルドスクリプトには、いくつかのデフォルトパラメータ、ターゲット、ルートなどを必要とするmacrodefを持つAntが組み込まれています。 、extrasrc-fおよびextrasrc-c。彼らが来た後、私は関連するすべてのリソースについて最新のチェックを行い、ターゲットが古くなった場合にのみビルドを行います。私は現時点で持っている何実行時に動的コンテンツを持つUnionおよびMacrodefスタイルの要素をAntで作成する
、
<?xml version="1.0" encoding="UTF-8"?>
<project name="Custom build" default="default">
<taskdef resource="net/sf/antcontrib/antlib.xml"
classpath="C:/dev/ant/ant-contrib/ant-contrib-1.0b3.jar"/>
<macrodef name="checkuptodate">
<attribute name="target" />
<element name="resource" />
<sequential>
<condition property="needbuild">
<and>
<resourcecount when="greater" count="0"> <resource /> </resourcecount>
<not>
<uptodate targetfile="@{target}">
<srcresources> <resource /> </srcresources>
</uptodate>
</not>
</and>
</condition>
</sequential>
</macrodef>
<macrodef name="projbuild">
<attribute name="root" />
<attribute name="target" />
<element name="extrasrc-f" optional="true" />
<element name="extrasrc-c" optional="true" />
<sequential>
<local name="needbuild" />
<checkuptodate target="@{root}/bin/@{target}">
<resource>
<union>
<extrasrc-f />
<fileset dir="@{root}/src" includes="**/*.java" />
</union>
</resource>
</checkuptodate>
<if>
<istrue value="${needbuild}" />
<then>
<javac
srcdir="@{root}/src"
destdir="@{root}/bin"
includeantruntime="false"
>
<extrasrc-c />
</javac>
</then>
</if>
</sequential>
</macrodef>
<target name="default">
<projbuild root="." target="EntryPoint.class">
<extrasrc-f>
<fileset dir="Proj2/src" includes="**/*.java" />
<fileset dir="Proj3/src" includes="**/*.java" />
</extrasrc-f>
<extrasrc-c>
<classpath location="Proj2/src" />
<classpath location="Proj3/src" />
</extrasrc-c>
</projbuild>
</target>
</project>
しかし、あなたは、それは非効率的だ私にとって、この時点で、見ることができる私がやりたいように、私が作成し、でで渡すようにしました少なくとも1つのファイルセット、および複数のクラスパス。私が本当にしたいのは、ディレクトリのリストを渡してから、その情報からextrasrc-fとextrasrc-c要素を作成するだけですが、私の人生にとっては、それを行うことができます。
私はAntとAnt-Contribのファンキーなクラスをたくさん読んだことがありますが、私にはこのようなことをするための何かを読んだことはありません。明らかな状況。
私は非常に間違った方法でこれに近づいていますか、それとも何か不足していますか?もし私が本当にAntを悪用しようとしているなら、私は適切な方法で正しい方法でポインタを得て、catchallを作成し、複数のソースをテストするmacrodef(またはそれを行う唯一の方法)ファイルをビルドされた1つのファイルに対して追加することができます。また、余分なクラスまたはライブラリパスも1つのリストに入れることができます。
遅い応答に対する謝罪。 –
母親、マーティンを心配するつもりはないが、遅れても応答は常に高く評価される。私はこの質問をして以来、私はもはや同じ会社にいませんが、私はAntスクリプトを定期的に使っていますが、scriptdefのことは知らなかったので、そんなに感謝します! – seaders