0

から環境プロパティを読み取る ant タスクがあります myproject.properties。環境プロパティの値が に設定され prod、「Prod 条件が true」と表示されています。変数が prod に設定されていることがわかり ${environment}ますが、条件が true にならない場合。誰かが理由を説明できますか?

myproject.properties:

environment=prod

build.xml:

<project name="my-project" default="run" basedir=".">
  <property file="myproject.properties" />
  <target name="run">
  <echo message="running target run ${environment}"/>
    <if>
      <equals arg1="${environment}" arg2="prod">
        <then>
          <echo message="Prod condition is true"/>
           <!--do prod environment specific task-->
       </then> 
    </if>    
  </target>
</project>
4

3 に答える 3

2

タスクに終了タグがないという事実equals(実際には自己終了タグである必要があります) 以外に、空白がどこかに隠れていることは間違いありません。echoで、プロパティの出力をアポストロフィなどで囲みます。

<echo message="running target run '${environment}'"/>

また、値の末尾に空白が表示される場合があります。それが私が考えることができる唯一の合理的な説明です。または、 で実行して-Denvironment=prod、何が起こるかを確認してください。

于 2012-10-02T22:59:52.100 に答える
1

次のソリューションでは、コア ANT を使用します。ant-contrib拡張機能によって提供される「if」タスクの使用を回避します。

<project name="my-project" default="run" basedir=".">
    <property file="myproject.properties" />

    <condition property="prod.set">
        <equals arg1="${environment}" arg2="prod"/>
    </condition>

    <target name="run" if="prod.set">
        <echo message="Prod condition is true"/>
    </target>
</project>
于 2012-10-05T18:05:02.427 に答える
0

うまくいけば、これを実行できたはずですが、念のために言っておきますが、antcontrib jarを含め、関連するtaskdefをproject.xmlに配置しましたか?そうでない場合は、ビルドファイルを修正し、antcontribjarをクラスパスにコピーしてください。

<project name="SampleWS" default="run" basedir=".">
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="lib/ant-contrib-0.6.jar" onerror="ignore"/>
 <property file="myproject.properties" />
 <target name="run">
 <echo message="running target run ${environment}"/>
    <if>
      <equals arg1="${environment}" arg2="prod"/>
        <then>
          <echo message="Prod condition is true"/>
           <!--do prod environment specific task-->
       </then> 
   </if>    
</target>
</project>
于 2012-10-04T04:51:09.483 に答える