2017-12-20 14 views
0

私の要件は非常に簡単です。例外をスローしないで内部的に例外を処理するANTタスクがありますが、代わりにカスタムメッセージ[これらは例外ではありません]をコンソールに投げています。以下のサンプルが、「指定された名前のワークスペースが存在しません」というテストとともに示されています。ANTスクリプトでの条件付きタスクの実行

enter image description here

ここでの私の要件は、どのようなメッセージが離れて「ビルドが成功」からがあれば、私はそれがさらに行くことはありませんように、私のANTスクリプトが失敗したことを確認する必要があり、です。しかし、コンソールに書き込まれたそのカスタムメッセージをどのように読むのか分からないので、私はそうすることができません。

「記録」タスクを試してみましたが、このログはコンソールにのみ書き出され、ファイルには書き込まれなかったため、失敗しました(理由はわかりません)。しかし、それがファイルに書き込まれたとしても、ファイルの各行を読んで、特定のテキストが存在するかどうかを知ることが理想的です。

以前に実行されたコンソールから簡単に試してみる方法はありますか?あなたが探しているもの

<target name="build"> 
    <record name="test.txt" action="start" append="true" loglevel="verbose" /> 
    <echo>Welcome to Apache Ant! Building the project in Cordys Middleware</echo> 
    <property environment="env"/> 
    <property name="bop.install.dir" value="${env.CORDYS_HOME}"/> 
    <exec executable="${bop.install.dir}/components/cws/scripts/linux/CWSPackage.sh" failonerror="true" resultproperty="output">   
     <env key="CLASSPATH" value="/opt/Cordys/Oracle_Jar/ojdbc6.jar"/> 
     <arg value="${ORG_NAME}"/> 
     <arg value="${WORKSPACE_NAME}"/> 
     <arg value="${PROJECT_NAME}"/>  
    </exec> 
    <echo>Finishing the build</echo> 
    <record name="test.txt" action="stop"/> 
    <echo>${output}</echo> 
    <fail>Something wrong here.</fail> <!-- I want to throw this error conditionally --> 
</target> 

答えて

1

execタスクのoutputproperty属性です。

あなたはこのような何か行うことができます。

<exec executable="${my.executable}" outputproperty="exec.output"> 
    <arg value="${my.arg}" /> 
</exec> 

<fail message="Invalid output from exec task"> 
    <condition> 
     <contains string="${exec.output}" substring="The workspace with the specified string does not exist." /> 
    </condition> 
</fail> 

複数の条件(ブールにおける複雑さの任意のレベルが許可されている):

<fail message="Invalid output from exec task"> 
    <condition> 
     <and> 
      <not> 
       <contains string="${exec.output}" substring="SUCCESS" /> 
      </not> 
      <or> 
       <contains string="${exec.output}" substring="ERROR" /> 
       <contains string="${exec.output}" substring="FAILED" /> 
      <or> 
     </and> 
    </condition> 
</fail> 

正規表現:

<fail message="Invalid output from exec task"> 
    <condition> 
     <matches string="${exec.output}" pattern="The .* does not exist." /> 
    </condition> 
</fail> 
+0

使用しているANTのバージョンは?私はこれを実行しようとしましたが、 "失敗はネストされた" contains "要素をサポートしていません"というエラーで失敗しました。私は同じ問題に直面しているANTの1.10.xxxバージョンを使用してみましたか?私はここで何をしなければならないことは他にありますか? –

+1

@KiranJoshi申し訳ありませんが、私は ''ブロックでそれを忘れてしまいました。もう一度試してみてください。あなたの他の答えに関しては、ant-contribの使用を避けることをお勧めします。 – CAustin

+0

outputproperty = "$ {exec.output}"はキャプチャされていませんオースティン:( これをエコーし​​ても$ {exec.output}が表示されていて、明らかにこれが原因で失敗しました.... –

0
<!-- * This is an ANT script to build the project in development environment. 
     Steps involved in this are 
      * Building the project 
      * Publishing the project 
      * Creating the package for the project 
--> 

<!-- 
    Sample command to execute this 
    ant build -DORG_NAME=businessservices3 -DWORKSPACE_NAME=ConfigurationManagement -DPROJECT_NAME='ConfigurationManagement' 
--> 
<project name="Building Project" default="build"> 
    <property file="${PROJECT}" /> 
    <target name="build"> 
     <echo>Welcome to Apache Ant! Building the project in Cordys Middleware</echo> 
     <property environment="env"/> 
     <property name="bop.install.dir" value="${env.CORDYS_HOME}"/> 

     <exec executable="${bop.install.dir}/components/cws/scripts/linux/CWSPackage.sh" outputproperty="exec.output">  
      <env key="CLASSPATH" value="/opt/Cordys/Oracle_Jar/ojdbc6.jar"/> 
      <arg value="${ORG_NAME}"/> 
      <arg value="${WORKSPACE_NAME}"/> 
      <arg value="${PROJECT_NAME}"/>  
     </exec> 
     <fail message="Build not successful for the project ${PROJECT_NAME}"> 
      <condition> 
       <not> 
        <contains string="${exec.output}" substring="Operation completed successful" /> 
       </not> 
      </condition> 
     </fail> 

    </target> 
</project> 

これはmuの後に私のために働いたトレイルとエラーメソッドのch。 オースティンに感謝します。これは動作しているANTですが、あなたの答えを受け入れるのは、あなたが話した内容の修正版だからです:)

関連する問題