2010-12-22 9 views
9

मैं चींटी में एक नया कार्य परिभाषित कर रहा हूं। मैं इसे एक जार के रूप में निर्यात और मेरे buildfile को जोड़ा गया:taskdef के लिए कक्षापथ?

<taskdef classname="X" classpath="Y.jar"/> 

समस्या यह है कि इस क्रम में विफल हो जाता है। यह मुझे बताता है कि इसे कक्षा नहीं मिली। कक्षा के लिए जार जोड़कर, यह सही किया गया है।

मेरा प्रश्न है: क्या कोई तरीका है कि मैं कक्षा के बिना बदलाव के, चींटी बिल्डफाइल से अपने जार का उल्लेख कर सकता हूं?

उत्तर

1

हां। मुझे लगता है कि आपने पर taskdef के लिए देखा है, जो केवल कार्य का नाम और कार्यान्वयन वर्ग दिखाता है। हालांकि, taskdef सबक्लास typedef, और यदि आप बाद में doc देखते हैं तो आप देखेंगे कि classpath विशेषता भी है।

इस विशेषता का उपयोग करते हुए का अर्थ है कि आपकी चींटी स्क्रिप्ट किसी विशेष वातावरण से बंधी हुई हैं; वे बहुत पोर्टेबल नहीं हैं। -libinvocation option का उपयोग करके कक्षा में एंटी में पास करने का एक बेहतर तरीका है।

+2

और यदि आप 'क्लासस्पैट' पर्यावरण चर का उपयोग कर रहे हैं, तो नहीं। इसे अपने पर्यावरण सेटअप से हटाएं, और क्लासपाथ को स्पष्ट रूप से निर्दिष्ट करने की आदत में आएं। अन्यथा, आप स्वयं को हार्ड-टू-डीबग समस्या के साथ पाएंगे जहां एक लाइब्रेरी आपके क्लासपाथ से लोड हो जाती है और आप इसकी अपेक्षा नहीं करते हैं। या कोई और आपका कोड नहीं चला सकता है क्योंकि उसके पास समान 'क्लासस्पैट' पर्यावरण चर नहीं है। – Anon

+3

मुझे नहीं पता कि यह _A बहुत बेहतर दृष्टिकोण_ क्यों है। '-lib' विकल्प के साथ क्लासपाथ निर्दिष्ट करना केवल उपयोगकर्ता को उन पथों से अवगत कराता है। आपको अभी भी उपयोगकर्ता को यह बताना होगा कि उन्हें कहां देखना है (उदाहरण के लिए, रीडमे में, सहायता फ़ाइल या प्रतिध्वनि संदेश)। या आप अपने प्रोजेक्ट निर्देशिका पदानुक्रम को पुन: स्थापित करने का निर्णय ले सकते हैं ताकि उन libs को एक विशिष्ट उपदिर में शामिल किया जा सके, जो "पर्यावरण-स्वतंत्र" बन जाए। एक निर्माण स्क्रिप्ट को इन विवरणों का ख्याल रखना चाहिए और आदर्श रूप से डिफ़ॉल्ट 'चींटी' आमंत्रण के साथ एक समझदार वस्तु उत्पन्न करना चाहिए। – Alberto

8

यदि आप अपने जार के पथ को जानते हैं, तो चींटी स्क्रिप्ट के अंदर आप कक्षा के अपने कार्य के लिए परिभाषित कर सकते हैं।

<taskdef name="myTaskName" classname="com.myorg.myclass"> 
    <classpath> 
    <pathelement location="pathToMyJar.jar"/> 
    </classpath> 
</taskdef> 
संबंधित मुद्दे