2011-02-24 11 views

उत्तर

363

चींटी रनटाइम

सीधे शब्दों में includeantruntime="false" सेट:

<javac includeantruntime="false" ...>...</javac> 

आप javac -task कई बार उपयोग करने के लिए है, तो आप अपने खुद के javac -task कि हमेशा includeantruntime="false" सेट को परिभाषित करने के PreSetDef उपयोग करने पर विचार करना चाह सकते हैं ।

अतिरिक्त विवरण

http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set से:

यह एक misfeature चींटी 1.8 में पेश की वजह से है। उस नाम के विशेषता को javac कार्य में जोड़ें, इसे गलत पर सेट करें, और इसे कभी भी भूल जाएं।

http://ant.apache.org/manual/Tasks/javac.html से:

चींटी रन-टाइम में शामिल करना है या नहीं classpath में पुस्तकालयों; को हां तक, जब तक build.sysclasspath सेट नहीं है। यह आमतौर पर पर सेट करना सबसे अच्छा है, इसलिए स्क्रिप्ट का व्यवहार वातावरण के प्रति संवेदनशील नहीं है जिसमें यह चलाया जाता है।

+0

अपाचे एंटी (टीएम) संस्करण 1.8.2 दिसंबर 20 2010 – user496949

+0

पर संकलित किया गया है, इसलिए यदि आपको क्लासपाथ में चींटी रनटाइम की आवश्यकता है तो इसे हां/सच में अन्यथा/गलत पर सेट करें। मुझे लगता है कि आपको इसकी आवश्यकता नहीं है। –

+0

यह आपके लिए काम नहीं कर रहा है? –

56

Chet Hosey एक अच्छा स्पष्टीकरण here लिखा है:

ऐतिहासिक रूप से, चींटी हमेशा classpath में अपने स्वयं के क्रम javac काम के लिए उपलब्ध कराया शामिल थे। तो चींटी के साथ शामिल किसी भी पुस्तकालय, और चींटी के लिए उपलब्ध किसी भी पुस्तकालय, स्वचालित रूप से आपके बिल्ड के क्लासपाथ में हैं चाहे आप इसे पसंद करते हैं या नहीं।

यह निर्णय लिया गया कि शायद यह संभवतः अधिकांश लोग नहीं चाहते थे। तो अब इसके लिए एक विकल्प है।

यदि आप "सत्य" (includeantruntime के लिए) चुनते हैं, तो कम से कम आप जानते हैं कि आपके बिल्ड क्लासपाथ में एंटी रनटाइम शामिल होगा। यदि आप "झूठा" चुनते हैं तो आप इस तथ्य को स्वीकार कर रहे हैं कि पुराने संस्करण और 1.8+ के बीच निर्माण व्यवहार बदल जाएगा।

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

+3

मैंने हमेशा सोचा कि यह अब तक का सबसे मूर्खतापूर्ण विशेषता/संदेश था। कौन अपने विन्यास प्रबंधन उपकरण में 'दोहराने योग्य बनाता है' चाहता है?;) – karmakaze

25

डैनियल का उत्तर बिल्कुल सही काम करता है। यहां एक नमूना स्निपेट है जिसे मैंने अपने निर्माण में जोड़ा है।xml:

<target name="compile"> 
    <mkdir dir="${classes.dir}"/> 
    <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false"> 
               <!-- ^^^^^^^^^^^^^^^^^^^^^^^^^ --> 
     <classpath> 
      <path id="application" location="${jar.dir}/${ant.project.name}.jar"/> 
      <path id="junit" location="${lib.dir}/junit-4.9b2.jar"/> 
     </classpath> 
    </javac> 
</target> 
5

तुम मुझे कमांडलाइन से काम को पसंद करते हैं त्वरित जवाब

export ANT_OPTS=-Dbuild.sysclasspath=ignore 

निष्पादित हो रहा है और फिर अपने चींटी स्क्रिप्ट को फिर से चलाएँ।

+0

यह मुझे * बहुत * मदद करता है। मैं 'सेट ANT_OPTS = -Xms40M -Xmx512M -Dbuild.sysclasspath = अनदेखा' का उपयोग कर रहा हूं। –

65

@Daniel Kutik का उल्लेख है, presetdef एक अच्छा विकल्प है। खास तौर पर अगर एक कई build.xml फाइलों के साथ एक परियोजना पर काम कर रहा है जो एक नहीं कर सकते हैं, या पसंद नहीं, संपादित (जैसे, तृतीय-पक्षों के उन।)

presetdef का उपयोग करने के लिए, अपने उच्च-स्तरीय build.xml फ़ाइल में इन पंक्तियों को जोड़ने :

<presetdef name="javac"> 
    <javac includeantruntime="false" /> 
    </presetdef> 

अब बाद के सभी javac कार्य अनिवार्य रूप से includeantruntime="false" प्राप्त कर लेगा। यदि आपकी परियोजनाओं को वास्तव में चींटी रनटाइम पुस्तकालयों की आवश्यकता होती है, तो आप उन्हें अपनी बिल्ड फ़ाइलों में स्पष्ट रूप से जोड़ सकते हैं या includeantruntime="true" सेट कर सकते हैं। उत्तरार्द्ध भी चेतावनियों से छुटकारा पा जाएगा।

बाद javac कार्य अभी भी स्पष्ट रूप से यह अगर वांछित को बदल सकते हैं, उदाहरण के लिए:

<javac destdir="out" includeantruntime="true"> 
    <src path="foo.java" /> 
    <src path="bar.java" /> 
</javac> 

मैं ANT_OPTS उपयोग करने के खिलाफ सलाह देते हैं। यह काम करता है, लेकिन यह चेतावनी के उद्देश्य को हरा देता है। चेतावनी एक को बताती है कि किसी का निर्माण किसी अन्य सिस्टम पर अलग-अलग व्यवहार कर सकता है। ANT_OPTS का उपयोग करके यह और भी अधिक संभावना है क्योंकि अब प्रत्येक सिस्टम को ANT_OPTS का उपयोग उसी तरह करने की आवश्यकता है। इसके अलावा, ANT_OPTS विश्व स्तर पर, बिना सोचे समझे अपने सभी परियोजनाओं

+0

एकाधिक जावैक कार्यों के साथ मौजूदा चींटी बिल्ड फ़ाइल को पुन: स्थापित करने के लिए बहुत अच्छा काम करता है। Presetdef तत्व सिर्फ परियोजना तत्व के अंदर चला जाता है। – saxman

+0

@jwfearn: क्या गैर-अंतर्निहित चींट कार्यों के लिए काम करने के लिए समान 'presetdef' चाल बनाई जा सकती है? मैंने इसे 'स्कालैक' के साथ करने की कोशिश की है, लेकिन क्योंकि निम्न-डाउन 'build.xml' फ़ाइलों को' स्कालैक 'कार्य को मैन्युअल रूप से परिभाषित करना है, वे शीर्ष-स्तर पर सेट किए गए जो भी ओवरराइड करते हैं। –

+2

एक नोट, कि प्रीसेटडेफ का उपयोग करने से एंटी चेतावनी होगी कि जावैक कार्य को फिर से परिभाषित किया गया है। प्रत्येक जवाक कार्य के लिए addind infantruntime इस से बचाता है। मुझे चेतावनी के डाउनसाइड्स के बारे में पता नहीं है। लेकिन यह उन लोगों के लिए उपयोगी हो सकता है जिन्हें स्वच्छ बनाने की आवश्यकता है। – mikijov

5

उपयोग <property name="build.sysclasspath" value="last"/> अपने build.xml फ़ाइल में

अधिक जानकारी के लिए Ant javac

अन्य संभावित मान खोज includeAntRuntime में लागू होगी चेतावनी को दबा पाया जा सकता है here

-3

मुझे इसका सामना करना पड़ा, मैं प्रोग्राम और फीचर में चेक इन करता हूं। jdk1.8 के लिए एक अद्यतन स्थापित किया गया था जो ग्रहण में चींटी के लिए मेरी पुरानी सेटिंग (jdk1.6.0) के साथ संगत नहीं है। मैं उस अद्यतन को स्थापित करता हूं। अभी, मेरी चींटी परियोजना सफलता का निर्माण कर रही है।

इसे आज़माएं, उम्मीद है कि यह सहायक होगा।

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