0

私は次のAntビルドファイルを持っていますimporter.xml

<project name="importer" basedir=".." default="build">
    <import file="imported.xml"/>

    <target name="build">
        <!-- Do some stuff... -->

        <property name="isRunningFromImporter" value="true"/>
        <antcall target="run-now"/>
    </target>
</project>

そしてimported.xml、ant-contribタスクを使用する別のビルドファイル:

<project name="importer" basedir=".." default="build">
    <!-- Most of file omitted for brevity -->

    <target name="run-now">
        <if>
            <not-equals arg1="${isRunningFromImporter}" arg2="true"/>
            <then>
                <!--
                    This should only execute when the
                    isRunningFromImporter property is not true.
                -->
            </then>
        </if>
    </target>
</project>

imported#run-nowターゲットは、スタンドアロンのAntタスクとして実行できます。次に例を示します。

ant -buildfile import.xml run-now

<then>この場合、句/タスクを実行したくありません。ただし、インポート先と同じタスクを実行すると、次のようになりますimporter.xml

ant-buildfileimporter.xmlビルド

次に、句/タスクを実行したいのです<then>が、Antでは、あるファイルのプロパティを表示して別のファイルで読み取ることはできません。何か案は?前もって感謝します!

4

2 に答える 2

1

それはあなたがデフォルトで望むことをします。Antcallの「inheritAll」属性はtrueに設定されています。

次のコードを実行すると、プロパティが実際に設定されていることを示すechoの「true」が表示されます。

<project name="importer" basedir=".." default="build">
    <import file="imported.xml"/>

    <target name="build">
        <!-- Do some stuff... -->

        <property name="isRunningFromImporter" value="true"/>
        <antcall target="run-now"/>
    </target>
</project>

<project name="importer" basedir="..">
    <!-- Most of file omitted for brevity -->

    <target name="run-now">

        <echo>${isRunningFromImporter}</echo>
    </target>
</project>

私はよく知らない<not-equals arg1="${isRunningFromImporter}" arg2="true"/>。私はいつも<not><equals ...>代わりに使ってきました。等しくないものはどこから来るのですか?問題がその行にないことを確認しますか?

于 2012-10-13T13:09:44.597 に答える
0

次のイディオムを使用して、特定のビルドファイルがユーザーによって呼び出されたメインファイルであるかどうか、またはインポートされているかどうかを自動的に判断できます。

<project name="projectA">
  <!-- set a property if this file is standalone, don't set it if imported -->
  <condition property="projectA.standalone">
    <equals arg1="${ant.file}" arg2="${ant.file.projectA}" />
  </condition>

  <target name="standalone-only" if="projectA.standalone">
    <echo>I am standalone</echo>
  </target>

  <target name="imported-only" unless="projectA.standalone">
    <echo>I have been imported</echo>
  </target>
</project>

ここでの秘訣は、暗黙のプロパティがコマンドラインで指定された(または呼び出された場合は暗黙的に使用される)メインant.fileビルドファイルのパスに設定されることですが、さらにAntはプロパティをすべての関連するビルドファイルのパスに設定します(メインまたはインポート)。したがって、が最上位のビルドファイルである場合に限ります。build.xmlant.file.PROJECTNAME<project name="PROJECTNAME">${ant.file} == ${ant.file.PROJECTNAME}PROJECTNAME

于 2012-10-13T13:19:41.537 に答える