ant - scientific - फायर एंट




सबैंट फेलमोनरर परावर्तन (2)

सुझाव देते हैं कि चींटी-प्रतिदान कार्यों में उपलब्ध एक्सटेंशन देखें।

'के लिए' कार्य संभवतः आपकी आवश्यकताओं को पूरा करने के लिए अनुकूलित किया जा सकता है।

आपकी 'सर्व-रिलीज़' लक्ष्य, चींटी-प्रतिरूप कार्यदेय के साथ, इस तरह दिख सकता है:

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <pathelement location="lib/ant-contrib-1.0b3.jar"/>
    </classpath>
</taskdef>

<target name="all-release">
    <for keepgoing="true" param="file">
        <path>
            <fileset dir="." includes="*/build.xml" />
        </path>
        <sequential>
            <ant antfile="@{file}" target="sub-release" />
        </sequential>
    </for>
</target>

कुछ अन्य चींटी-प्रतिरचना सुविधाओं का उपयोग करना विफल होने की सूची प्राप्त करना संभव हो सकता है।

ऊपर build.xml से नमूना लॉग:

$ ant all-release
Buildfile: build.xml

all-release:
     [echo] /work/Scratch/dir1/build.xml

sub-release:
     [echo] dir1
     [echo] /work/Scratch/dir2/build.xml

sub-release:
     [echo] dir2
      [for] /work/Scratch/dir2/build.xml: The following error occurred while executing this line:
      [for] /work/Scratch/build.xml:17: The following error occurred while executing this line:
      [for] /work/Scratch/dir2/build.xml:6: dir2 failed
     [echo] /work/Scratch/dir3/build.xml

sub-release:
     [echo] dir3

BUILD FAILED
/work/Scratch/build.xml:11: Keepgoing execution: 1 of 3 iterations failed.

Total time: 0 seconds

मेरे पास एंट कोड है जो सभी सबडिरेक्टरीज में रिलीज़ बिल्ड को बंद कर देता है:

<target name="all-release" >
    <subant target="sub-release" failonerror="true">
        <fileset dir="." includes="*/build.xml" />
    </subant>
</target>

लिखित रूप में, यदि किसी भी व्यक्ति का निर्माण विफल हो जाता है, तो सभी रिलीज़ तेजी से विफल हो जाएंगे (बाद में कोई भी निर्माण सफल नहीं होगा। अगर मैं failonerror = "false" स्विच करता हूं, तो सभी रिलीज़ सभी समय में सफल हो जाएंगे। -बिल्ड्स स्वतंत्र हैं, इसलिए मैं वास्तव में क्या चाहता हूं:

सभी उप-रिलीज़ निर्माण चलाते हैं, और उसके बाद सभी-रिलीज़ बाद में विफल हो जाते हैं अगर एक या अधिक उप-रिलीज़ विफल (आदर्श रूप से एक अच्छा त्रुटि संदेश जिसके बारे में विफल रहता है) के साथ।

कोई विचार?


एंटीलोप चींटी एक्सटेंशन में एक try-catch कमांड है, जिसका उपयोग आपको जरूरी करने के लिए किया जा सकता है:

<taskdef name="try" classname="ise.antelope.tasks.TryTask"/>
....
<try break="false" printmessage="true" >
   <antcall target="xmlValidate" />
   <antcall target="runJunit" />
   <antcall target="..." />
   <catch>
      <property name="haderrors" value="true"/>
   </catch>
</try>
<fail message="FAILED" if="haderrors" />

break=false विफल होने के बाद अगला आज्ञा जारी रखें। लेकिन असफल लक्ष्यों ने haderrors संपत्ति निर्धारित की जो अंत में जांच की गई थी। मैंने इसे रोजगार के निर्माण के लिए काफी इस्तेमाल किया (और यह ठीक काम करता है), लेकिन मुझे यकीन नहीं है कि यह <fileset> अंदर <subant> लिए काम करता है। शायद आपको सभी <subant> कॉलों को स्पष्ट रूप से <subant> करना है