चींटी की चेतावनी: "'मूलाधार' सेट नहीं किया गया था"


397

मुझे निम्नलिखित चेतावनी मिली है:

[javac] build.xml:9: warning: 'includeantruntime' was not set, 
defaulting to build.sysclasspath=last; set to false for repeatable builds

इसका क्या मतलब है?

जवाबों:


388

चींटी का रनटाइम

बस सेट includeantruntime="false":

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

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

अतिरिक्त जानकारिया

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

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

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

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


Apache Ant (TM) संस्करण 1.8.2 20 दिसंबर 2010 को संकलित किया गया
user496949

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

5
+1, बढ़िया जवाब। मेरी इच्छा है कि मैं एक बार बिल्डफाइल में कहीं जगह बना सकूं, बजाय इसके कि हर javac कॉल को बंद करने के बजाय ...
Jonik

1
यह किसी भी मामले में क्या है जो इसे True पर सेट करता है?
Lorenzo Lerate

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

72

जैसा कि @ डैनियल कुटिक ने उल्लेख किया है, 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आपके सभी प्रोजेक्ट्स में विश्व स्तर पर चेतावनियों को दबाने वाली विली-नीली लागू होगी


1
कई javac कार्यों के साथ एक मौजूदा चींटी फ़ाइल को फिर से तैयार करने के लिए बढ़िया काम करता है। पूर्व निर्धारित तत्व सिर्फ प्रोजेक्ट एलिमेंट के अंदर जाता है।
सैक्समैन

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

2
एक नोट, कि पूर्व निर्धारित का उपयोग करके एक चींटी चेतावनी दी जाएगी कि javac कार्य को फिर से परिभाषित किया गया है। प्रत्येक javac कार्य में Addindtruntunt को शामिल करने से बचा जाता है। मुझे चेतावनी के डाउनसाइड की जानकारी नहीं है। लेकिन यह उन लोगों के लिए उपयोगी हो सकता है जिन्हें स्वच्छ बिल्ड की जरूरत है।
मिकिजॉव

हाँ, प्रीसेटर्ड "टास्क जेवाक की पुरानी परिभाषा को ओवरराइड करने की कोशिश कर रहा है"
माइक जोंस

62

चेत होसे ने यहाँ एक अच्छी व्याख्या लिखी है :

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

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

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

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


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

1
यह उत्तर केवल वही प्रतीत होता है जो हमें बताता है कि चेतावनी का वास्तव में क्या मतलब है।
ty

26

डैनियल का जवाब एकदम सही काम करता है। यहाँ एक नमूना स्निपेट है जिसे मैंने अपने build.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

और फिर अपनी चींटी स्क्रिप्ट को फिर से चलाएं।


इससे मुझे बहुत मदद मिलती है । मैं उपयोग कर रहा हूं set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
पॉल वर्गास


-3

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

यह कोशिश करो, आशा है कि यह मददगार होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.