2014-10-15 8 views
5

विफल रहता है, तो मैं चेक के विफल होने पर उपयोग किए जाने वाले कई "चेक" और "परीक्षण" प्लगइन्स की रिपोर्ट फ़ाइल खोलना चाहता हूं। मुझे पता है कि मैं can use "finalizedBy किसी अन्य कार्य को निष्पादित करने के लिए कोई फर्क नहीं पड़ता कि मूल कार्य निष्पादित किया गया था या नहीं।ग्रेड: केवल एक कार्य निष्पादित करें यदि कोई कार्य

task showCheckStyleResultsInBrowser(type: Exec) { 
    ext.htmlFileName = "main.html" 
    executable 'open' 
    args 'file:///' + checkstyleMain.reports.xml.destination.parent + "/" + ext.htmlFileName 
} 

task showCheckStyleResultsIfFailed { 
    ext.aCheckFailed = true 
    doLast { 
     if (ext.aCheckFailed) { 
      showCheckStyleResultsInBrowser.execute() 
     } 
    } 
} 

checkstyleMain { 
    finalizedBy 'showCheckStyleResultsIfFailed' 
    doLast { 
     // convert the xml output to html via https://stackoverflow.com/questions/20361942/generate-checkstyle-html-report-with-gradle 
     ant.xslt(in: reports.xml.destination, 
       style: new File('config/checkstyle/checkstyle-noframes-sorted.xsl'), 
       out: new File(reports.xml.destination.parent, showCheckStyleResultsInBrowser.htmlFileName)) 

     showCheckStyleResultsIfFailed.aCheckFailed = false 
    } 
} 

स्पष्टीकरण (जहां तक ​​मैं यह समझ के रूप में):

  • showCheckStyleResultsInBrowser IST है कि ज्ञान का उपयोग करते हुए मैं रिपोर्ट खोलने के लिए केवल अगर इसी कार्य (इस उदाहरण checkstyle में) विफल रहता है निम्नलिखित की कोशिश की कार्य वास्तव में रिपोर्ट खोलने का काम करता है। आप वास्तव में क्या कर सकते हैं इसे अनदेखा कर सकते हैं, लेकिन यह चेक-टास्क
  • showCheckStyleResultsIfFailed कार्य एक संपत्ति aCheckFailed घोषित करता है और इसे सत्य में प्रारंभ करता है। जब इसे निष्पादित किया जाता है तो यह जांचता है कि यह अभी भी सत्य है (जिसका अर्थ है, चेक सफलतापूर्वक पूरा नहीं हुआ) और यदि ऐसा है, तो showCheckStyleResultsInBrowser का उपयोग करके रिपोर्ट खोलें।
  • checkstyleMain वह कार्य है जो वास्तविक जांच करता है। मुझे इसके परिणाम में दिलचस्पी है। हालांकि मुझे नहीं पता कि इसे कैसे प्राप्त किया जाए। तो इसके बजाय, checkStyleMain कार्य के अंत में, मैंने aCheckFailed प्रॉपर्टी को false पर सेट किया है, इस तथ्य पर निर्भर करते हुए कि अंतिम चरण केवल तभी निष्पादित किया जाएगा जब पिछले कोई भी चेक विफल नहीं हुआ।
  • showCheckStyleResultsIfFailedcheckstyleMain के बाद निष्पादित करने के लिए सेट है finalizedBy द्वारा कोई फर्क नहीं पड़ता। checkstyleMain विफल होने पर भी यह निष्पादित होगा। यह aCheckFailed संपत्ति का उपयोग यह निर्धारित करने के लिए करता है कि checkstyleMain सफलतापूर्वक पूरा हुआ था या नहीं।

यह ठीक काम करता है अगर मैं एक पूर्ण निर्माण करता हूं। लेकिन अगर मैं सिर्फ आंशिक पुनर्निर्माण करता हूं और चेकस्टाइल मुख्य कार्य नहीं चलता है, क्योंकि इसका पूरा परिणाम पहले से ही अद्यतित है, तो मैं aCheckFailed के साथ सत्य होने के साथ समाप्त होता हूं, क्योंकि checkstyleMain नहीं चला था, जो इसे वास्तव में कुछ ऐसा लगता है गड़बड़ हो गया।

तो मैं अपने showCheckStyleResultsInBrowser कार्य को निष्पादित कैसे कर सकता हूं यदि केवल चेकस्टाइलमेन कार्य विफल हो जाए? इसके अलावा, मेरा समाधान जो भी हासिल करता है उसके लिए भी बोझिल और हैकी महसूस करता है। क्या कोई आसान तरीका है?

उत्तर

8

आप यह निर्धारित करने के लिए कार्य स्थिति से पूछताछ कर सकते हैं कि यह विफल रहा है या नहीं।

task showCheckStyleResultsIfFailed { 
    onlyIf { 
     checkstyleMain.state.failure != null 
    } 
} 
+0

यह वास्तव में इसे बहुत अच्छा धन्यवाद देता है। –

+0

@ पीटर Niederwieser सच है, यदि संभव हो तो मैं वास्तविक जांच परिणाम का उपयोग करना चाहता हूं। लेकिन अभी के लिए मैं कार्य के परिणाम के आधार पर आम तौर पर कुछ कैसे करना चाहता था। लेकिन यदि आप जानते हैं कि चेक स्टाइल के उल्लंघन की वास्तविक सूची कैसे प्राप्त करें, तो यह बहुत अच्छा होगा। वर्तमान में, सब कुछ जो चेक शैली में "त्रुटि" नहीं है, कार्य को सफलतापूर्वक पूरा कर देता है, जिसका अर्थ है कि मैं कोई परिणाम नहीं दिखाऊंगा। –

+1

@ जोचिमकुर्ज़ फिर से इसके बारे में सोचते हुए, मुझे इस से बेहतर समाधान नहीं पता है। अपने मूल कोड के बारे में, ध्यान दें कि 'कार्य # निष्पादन' एक आंतरिक विधि है और इसे उपयोगकर्ता कोड से नहीं बुलाया जाना चाहिए। इसके बजाय मैं 'शो चेक स्टाइल रीसेट्सफफेल' एक और 'एक्ज़ेक' कार्य कर दूंगा। दो कार्यों को एक बार में कॉन्फ़िगर किया जा सकता है, लेकिन शायद यह इसके लायक नहीं है। –

संबंधित मुद्दे