0

フィルター コピーを実行する ant タスクがあり、パラメーターを変更するだけで複数回呼び出します。これは、さまざまな環境のプロパティ ファイルを作成するためです。

コピーと貼り付けを少なくできるように、呼び出し先を簡素化したい。

呼び出し対象はこちら

<target name="create_local_property_files" depends="clean,prepare">
    <!-- create first machine property files -->
    <antcall target="property.filter.copy" inheritAll="false">
        <param name="tmp.dom" value="machine1" />
    </antcall>
    <!-- create second machine property files -->
    <antcall target="property.filter.copy" inheritAll="false">
        <param name="tmp.dom" value="machine2" />
    </antcall>
            [...] <!-- to the n'th machine property file -->
</target>

1 つの呼び出しを行い、マシンのリストを渡したいと思います。助言がありますか?

完全を期すためのフィルター コピー ターゲットは次のとおりです。

<target name="property.filter.copy">
    <copy todir="${local.property.file.dir}" failonerror="true" verbose="true" overwrite="true">
        <filterset>
            <!-- Uses the same filters files as scripts -->
            <filtersfile file="${property.variables.dir}/${tmp.dom}.properties" />
        </filterset>
        <fileset dir="${property.file.dir}">
            <include name="cnmp.properties" />
            <include name="cnmp.jdo.properties" />
        </fileset>
        <!-- Deployment script looks for hostname.rest_of_filename-->
        <globmapper from="*" to="${tmp.dom}.*" />
    </copy>
</target>
4

2 に答える 2

0

ant-contribに実装されたいくつかのループがあり、うまく機能するはずです。

たとえば、foreachタスクを見てください。

于 2013-05-31T20:00:21.293 に答える
0

繰り返されるコードセグメントにはマクロ定義を使用することをお勧めします

<project name="demo" default="copy">

    <macrodef name="propertyFilterCopy">
        <attribute name="tmp.dom"/>
        <attribute name="local.property.file.dir" default="build/properties"/>
        <attribute name="property.variables.dir"  default="build/variables"/>
        <attribute name="property.file.dir"       default="build/files"/>
        <sequential>
            <copy todir="@{local.property.file.dir}" failonerror="true" verbose="true" overwrite="true">
                <filterset>
                    <filtersfile file="@{property.variables.dir}/@{tmp.dom}.properties" />
                </filterset>
                <fileset dir="@{property.file.dir}">
                    <include name="cnmp.properties" />
                    <include name="cnmp.jdo.properties" />
                </fileset>
                <globmapper from="*" to="@{tmp.dom}.*" />
            </copy>
        </sequential>
    </macrodef>

    <target name="copy" depends="gen-data">
        <propertyFilterCopy tmp.dom="machine1"/>
        <propertyFilterCopy tmp.dom="machine2"/>
    </target>

    <target name="gen-data">
        <mkdir dir="build/properties"/>
        <mkdir dir="build/variables"/>
        <mkdir dir="build/files"/>
        <echo file="build/files/cnmp.properties">x=1</echo>
        <echo file="build/files/cnmp.jdo.properties">x=1</echo>
        <echo file="build/variables/machine1.properties">x=1</echo>
        <echo file="build/variables/machine2.properties">x=1</echo>
    </target>

    <target name="clean">
        <delete dir="build"/>
    </target>

</project>

マクロ定義の 2 つ目の利点は、再利用可能なビルド ロジックの移植性をさらに高めるantlibとしてパッケージ化できることです。

于 2013-05-31T21:43:58.420 に答える