1

必要な変数が 2 つあります。最初は yyyy-MM-dd 形式の DSTAMP で、もう 1 つは私の .build ファイルからの buildNumber です。このような単純な構造では:

<project .....>

   <property ....>

   <target ....>

   <target .....>

</project>

私の質問は、${build.number} と DSTAMP をプロパティのように設定するにはどうすればよいですか? 私はこれをやろうとしました:

<project .....>

   <tstamp>
   <format property="DSTAMP" pattern="yyyy-MM-dd" />
</tstamp>

   <buildnumber file=".build"/>

   <property ....>

   <target ....>

   <target .....>

</project>

Ant スクリプトのどこにでも ${build.number} と ${DSTAMP} を使用してアクセスできると思っていましたが、予期しないトークンと表示されます。これらのプロパティを保存してどこからでもアクセスするにはどうすればよいですか?

Ant バージョン 1.5.4。Ant 1.6+ではそれを受け入れるようですが、これだけのためにライブラリを変更したくありません。

4

1 に答える 1

1

buildNumber タスクが希望どおりに動作しないため、別のソリューションを使用しました。

<project name="MyProject" default="all" basedir=".">

 <taskdef resource="net/sf/antcontrib/antlib.xml"/>

 <tstamp>
    <format property="DSTAMP" pattern="yyyy-MM-dd" />
    <format property="TODAY" pattern="yyyy-MM-dd HH:MM:SS" />
 </tstamp>
 <property file=".build"/>
 <property name="buildNum" value="${build.number}"/>

 [... some tasks ...]

 <target name="incrementVersion">
        <echo>Building version ${build.number} success</echo>
        <propertyfile file="./.build" comment="Build Number">
                <entry key="build.number" type="int" operation="+" default="1000" pattern="0000"/>
        </propertyfile>
 </target>

<target name="all" depends="some,other,target,incrementVersion"/>
</project>

このようにして、タスクが成功した場合にのみ、タスクの最後にのみインクリメントされることを 100% 確信しています。ここでの小さな問題は、buildNumber パラメータを初期化できるように、incrementVersion を 1 回実行する必要があることです。存在する場合の制御を行うことはできますが、ファイルが削除されることはないため、気にしません。Ant 1.6+ と Ant Contrib を使用する必要があります。私は Ant 1.8.2 と Ant Contrib 1.0b3 を使用しています。

于 2011-11-17T08:46:20.080 に答える