2013-05-20 6 views
66

sourceCompatibility और targetCompatibility के बीच संबंध/अंतर क्या है? क्या होता है जब वे अलग-अलग मूल्यों पर सेट होते हैं?ग्रैडल, "स्रोत कॉम्पैबिलिटी" बनाम "लक्ष्य अनुकूलता"?

Gradle documentation के अनुसार:

sourceCompatibility "जावा संस्करण अनुकूलता जब जावा स्रोत संकलन का उपयोग करने के है।" targetCompatibility "कक्षा संस्करण उत्पन्न करने के लिए जावा संस्करण" है।

मेरी समझ यह है कि targetCompatibility जावा बाइटकोड उत्पन्न करेगा जो जावा के विशिष्ट संस्करण के साथ संगत है, क्या यह sourceCompatibility की कार्यक्षमता का सबसेट है?

उत्तर

44

यह मानचित्र javac के माध्यम से - the cross compilation section देखें - स्रोत मूल रूप से स्रोत भाषा स्तर है और लक्ष्य जेनरेट किए गए बाइटकोड का स्तर है।

31

जब आप इनका उपयोग करते हैं तो सावधान रहें; हम धारणा बनाने वाले लोगों द्वारा काट दिया गया है।

सिर्फ इसलिए कि आप 1.5 का स्रोत कॉम्पैबिलिटी (या लक्ष्य कॉम्पैबिलिटी) का उपयोग करते हैं, इसका मतलब यह नहीं है कि आप हमेशा अपने कोड को जेडीके 1.6 के साथ संकलित कर सकते हैं और उम्मीद कर सकते हैं कि यह जेडीके 1.5 के तहत काम करे। मुद्दा उपलब्ध पुस्तकालय है।

यदि आपका कोड कुछ विधि कॉल करने के लिए होता है जो केवल जेडीके 1.6 में उपलब्ध है, तो यह लक्ष्य VM के लिए विभिन्न संगतता विकल्पों के साथ अभी भी संकलित होगा। लेकिन जब आप इसे चलाते हैं, तो यह असफल हो जाएगा क्योंकि अपमानजनक विधि मौजूद नहीं है (आपको एक MethodNotFoundException या ClassNotFoundException प्राप्त होगा)।

इस कारण से, मैं हमेशा संगतता सेटिंग की वास्तविक जावा संस्करण में तुलना करता हूं जो मैं बना रहा हूं। अगर वे मेल नहीं खाते हैं, तो मैं निर्माण में विफल रहता हूं।

+2

के पिछले संस्करणों पर यह एक सूक्ष्म, लेकिन बहुत महत्वपूर्ण प्रेक्षण है। – Natix

+0

आप उनकी तुलना कैसे करते हैं? – zero01alpha

+0

आप निर्माण में विफल क्यों होते हैं? "बूटस्ट्रैप क्लासपाथ" विकल्प सिर्फ इस समस्या को कम करने के लिए दिया गया है। आप हमेशा उचित बूटस्ट्रैप का उपयोग कर सकते हैं और इसे ठीक काम करना चाहिए। – Codebender

17

sourceCompatibility = निर्दिष्ट करता है कि जावा प्रोग्रामिंग भाषा के संस्करण जावा फ़ाइलों को संकलित करने के लिए इस्तेमाल किया जा। उदाहरण स्रोत कॉम्पैबिलिटी 1.6 = निर्दिष्ट करता है कि जावा प्रोग्रामिंग भाषा का संस्करण 1.6 संकलित करने के लिए उपयोग किया जा सकता है। जावा फ़ाइलें।

डिफ़ॉल्ट sourceCompatibility = "उपयोग में वर्तमान JVM के संस्करण" और targetCompatibility = sourceCompatibility

targetCompatibility तक = विकल्प सुनिश्चित करता है कि उत्पन्न वर्ग फ़ाइलों VMs targetCompatibility द्वारा निर्दिष्ट के साथ संगत हो जाएगा। ध्यान दें कि ज्यादातर मामलों में, लक्ष्य विकल्प का मूल्य -सोर्स विकल्प का मान है; उस स्थिति में, आप लक्ष्य विकल्प को छोड़ सकते हैं।

कक्षा फ़ाइलें targetCompatibility द्वारा निर्दिष्ट लक्ष्य पर और बाद के संस्करण पर चलेगा, लेकिन नहीं वीएम

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