ant घर - चींटी में खाली प्लेसहोल्डर फाइलसेट बनाना




चीटियाँ मतलब (3)

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

सभी बच्चे बिल्डफ़ाइलों में इन अतिरिक्त निर्भरता नहीं होगी, इसलिए मैं अतिरिक्त निर्भरता फ़ाइलों को परिभाषित करने के लिए उन्हें मजबूर नहीं करना चाहता। उन्हें माता-पिता को शामिल करने में सक्षम होना चाहिए, और संकलन कार्य को सिर्फ कार्य करना चाहिए।

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

मेरे पास कुछ है जो काम करता है: पैरेंट बिल्डफ़ाइल में संकलन कार्य अतिरिक्त निर्भरता fileset को संदर्भित करता है:

<target name="compile" depends="init-additional-dependencies">
  <fileset id="global.dependency.fileset" dir="${global.library.directory}">
     <include name="**/*.jar"/>
  </fileset>
  <javac ...>
    <classpath>
      <!-- should be the same for all buildfiles -->
      <fileset refid="global.dependency.fileset"/>

      <!-- should be populated by child buildfiles -->
      <fileset refid="additional.dependency.fileset"/>
    </classpath>
  </javac>
</target>

... और पैरेंट बिल्डफ़ाइल का भी एक ऐसा कार्य है जो इस फाइलसेट को खाली करता है, जिससे कि जवाक उड़ा नहीं करता। हालांकि, जिस तरह से मैं खाली फाइलसेट का निर्माण कर रहा हूं वह डिपी है:

<target name="init-additional-dependencies">
  <!-- override me! -->
  <fileset id="additional.dependency.fileset" dir=".">
    <include name="placeholder.does.not.exist.so.fileset.is.empty"/>
  </fileset>
</target>

यह काम करता है, लेकिन गूंगा लगता है, और यह विश्वास करना मुश्किल है कि बेहतर दृष्टिकोण नहीं है वह बेहतर तरीका क्या है?


Answers

पैरेंट बिल्ड फ़ाइल में जोड़ें:

<fileset id="additional.dependency.fileset" erroronmissingdir="false" dir="noop" />

उन बच्चों के लिए जो अतिरिक्त कलाकृतियों को जोड़ने की आवश्यकता होती है, fileset को बच्चा निर्माण फ़ाइल में परिभाषित करें:

<fileset id="additional.dependency.fileset" dir="..." includes="..." />

मुझे नहीं लगता है कि इस बारे में बहुत चर्चा हुई है, इसलिए कोई 'सम्मेलन' ऐसा ही नहीं है। जिस प्रकार से फाइलेट काम करता है, वैसे ही 'ट्रम्प' समावेशन बहिष्करण, इस प्रकार

<fileset refid="additional.dependency.fileset" dir="." excludes="**" />

हमेशा खाली होना चाहिए यह आपके प्लेसहोल्डर फ़ाइल नाम तकनीक, और प्लेसहोल्डर डायरेक्टरी नाम और erroronmissingdir विधि दोनों के लिए थोड़ा बेहतर है।

समस्या उत्पन्न होती है क्योंकि, डिफ़ॉल्ट रूप से, फाइलेट के अभिभावकीय निर्देशिका के नीचे सभी फाइलों में एक अंतर्निहित शामिल है एक और विकल्प - संभवत: आपके मामले में प्रत्यक्ष उपयोग की नहीं - बजाय filelist का उपयोग करना है क्योंकि फ़ाइल नाम स्पष्ट रूप से नामित फ़ाइलों से बनाए गए हैं, यदि आप किसी भी नाम नहीं देते हैं, तो वे खाली हैं।

<filelist id="additional.dependency.filelist" />

सामान्यीकृत करके, आप फ़ाइलें और फाइललिस्ट मिश्रण कर सकते हैं, यदि आप resources का उपयोग करने के लिए अपनी कक्षा को संशोधित करते हैं:

<filelist id="additional.dependency.resources" />

...

<classpath>
      <!-- should be the same for all buildfiles -->
      <fileset refid="global.dependency.fileset"/>

      <!-- should be populated by child buildfiles -->
      <resources refid="additional.dependency.resources"/>
</classpath>

संदर्भ additional.dependency.resources या तो एक फाइलसेट या फाइललिस्ट (रिक्त फाइललिस्ट सहित), या किसी अन्य फ़ाइल-आधारित संसाधन संग्रह हो सकते हैं


मैंने पाया कि भले ही मेरा रास्ता JDK पर सेट है, चींटी jre फ़ोल्डर से tools.jar चाहती है। तो बस JDK से jre करने के लिए tools.jar फ़ोल्डर को कॉपी पेस्ट करें।