2010-04-15 9 views
11

पर मौजूद नहीं है, तो मेरे पास मेरी बिल्ड स्क्रिप्ट में निम्न क्लीन फ़ंक्शन है और मैं जानना चाहता हूं कि मैं इसे कैसे सुधार सकता हूं।जब कोई निर्देशिका मौजूद है और हटाया नहीं गया है तो एंटी का डिलीट कार्य विफल हो गया है, लेकिन जब यह

<target name="clean" description="Clean output directories."> 
    <!-- Must not fail on error because it fails if directories don't exist. 
     Is there really no better way to do this? --> 
    <delete includeEmptyDirs="true" failonerror="false"> 
     <fileset dir="${main.build.directory}" /> 
     <fileset dir="dist" /> 
     <fileset dir="${documentation.build.directory}" /> 
     <fileset dir="/build-testing" /> 
    </delete> 
</target> 

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

विचार?

+0

क्या आप इस प्रश्न को संपादित करने के बजाय स्वयं जवाब दे सकते हैं? आप अपना जवाब स्वीकार कर सकते हैं और फिर मैं अपना हटा सकता हूं, क्योंकि यह गलत हो गया है –

+1

वहां आप जाते हैं, महोदय। :) –

उत्तर

9

via Michael's answer, जो मुझे चाहिए 9 0% था, लेकिन वहां बिल्कुल नहीं है।

<target name="clean" description="Clean output directories."> 
    <!-- Must not fail on error because it fails if directories don't exist. 
     Is there really no better way to do this? --> 
    <delete includeEmptyDirs="true" failonerror="false"> 
     <fileset dir="${main.build.directory}" /> 
     ... 
    </delete> 

    <available 
      file="${main.build.directory}" 
      type="dir" 
      property="delete-main-failure" /> ... 

    <condition property="delete-failure"> 
     <and> 
      <isset property="delete-main-failure" /> ... 
     </and> 
    </condition> 
    <fail 
      if="delete-failure" 
      message="Unable to delete previous build's directories." /> 
</target> 

यह मेरा मानदंड है कि कोड इसे हटाने के लिए प्रयास करता है और फिर अगर यह अभी भी मौजूद है विफल रहता है को पूरा करती है:

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

+0

"हटाए गए कार्य का डिफ़ॉल्ट व्यवहार मुझे बहुत अजीब बनाता है" यह मुझे गलत मानता है। – leonbloy

+0

हालत का कार्य यहां अनावश्यक लगता है। – mcsilvio

5

मैं यहां एक ही प्रश्न पूछने के लिए आया था ... ऐसा नहीं लगता है कि इसे हल करने का एक शानदार तरीका है।

<mkdir dir="${main.build.directory}" /> 
<delete dir="${main.build.directory}" failonerror="true" /> 

मुझे नहीं लगता था हटाने कार्य एक "अगर" संपत्ति था: जब मैं कोड साफ रखना चाहते हैं, मैं इसे इस तरह से करते हैं। इसे जांचना होगा।

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