यह कमांड क्लिअर है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
क्लिर्र - जावा लाइब्रेरीज़ के स्रोत और बाइनरी अनुकूलता की जाँच करें
SYNOPSIS
क्लिर -o Oldjar -n न्यूजर [विकल्पों]
वर्णन
क्लिर्र एक उपकरण है जो पुराने के साथ बाइनरी और स्रोत संगतता के लिए जावा लाइब्रेरी की जांच करता है
जारी करता है. मूलतः आप इसे जार फ़ाइलों के दो सेट देते हैं और क्लिर्र इसकी एक सूची निकाल देता है
सार्वजनिक एपीआई में परिवर्तन.
विकल्प
-a, --दिखाएँ-सभी-स्कोप
निजी और पैकेज कक्षाएं दिखाएं
-f, --निर्गम संचिका
आउटपुट फ़ाइल नाम
-i, --include-pkg
केवल इस पैकेज और इसके उपपैकेज से कक्षाएं शामिल करें
-n, --नया संस्करण
नए संस्करण की जार फ़ाइलें
-एनसीपी, --न्यू-क्लासपाथ
तृतीय पक्ष क्लासपाथ जिसे नए संस्करण द्वारा संदर्भित किया गया है
-o, --पुराना संस्करण
पुराने संस्करण की जार फ़ाइलें
-ओसीपी, --ओरिजिनल-क्लासपाथ
तृतीय पक्ष क्लासपाथ जो पुराने संस्करण द्वारा संदर्भित है
-p, --शो-पीकेजी-स्कोप
पैकेज स्कोप कक्षाएं दिखाएं
-s, --अंदाज [पाठ|एक्सएमएल]
आउटपुट शैली
संदेश
जब क्लिअर जार में बदलाव के बारे में एक त्रुटि, चेतावनी या सूचना संदेश उत्पन्न करता है
तुलना में, एक संबद्ध संदेश संदर्भ कोड है। इस मैनुअल में एक शामिल है
उस संदेश के अर्थ की व्याख्या जिसमें ऐसी जानकारी हो सकती है जो नहीं हो सकती
संक्षिप्त संदेश सारांश में फिट किया जाए।
संदेशों को तीन गंभीरता स्तरों में विभाजित किया गया है: त्रुटि, चेतावनी और जानकारी।
त्रुटियाँ दो स्वादों में आती हैं:
लिंक-टाइम विफलताएँ, जहाँ कोड संकलित होते ही एक अपवाद फेंक दिया जाएगा
किसी वर्ग के पुराने संस्करण के विरुद्ध और वर्ग के नए संस्करण को लोड किया जाता है
वही क्लासलोडर पदानुक्रम।
रन-टाइम विफलताएँ, जहाँ पुराने के विरुद्ध कोड संकलित होने पर एक अपवाद फेंक दिया जाता है
किसी वर्ग का संस्करण वर्ग के किसी नए संस्करण पर किसी विधि को कॉल करने का प्रयास करता है, या इसके विपरीत
विपरीत।
क्लिर्र उन मामलों के लिए "त्रुटियों" की रिपोर्ट करता है जहां रन-टाइम विफलता प्राप्त करना संभव है। चाहे
वास्तव में घटित होना लाइब्रेरी को कॉल करने के तरीके पर निर्भर हो सकता है, अर्थात रिपोर्ट किए गए परिवर्तन
क्योंकि जब तक लाइब्रेरी के उपयोग के पैटर्न का उपयोग किया जाता है तब तक त्रुटि वास्तव में काम कर सकती है
विफलता की स्थिति को ट्रिगर न करें.
चेतावनियाँ उन स्थितियों के लिए जारी की जाती हैं जहाँ कोई लिंक या रनटाइम अपवाद नहीं होगा, लेकिन
जहां हुए परिवर्तनों के कारण एप्लिकेशन अप्रत्याशित रूप से व्यवहार कर सकता है।
सूचना संदेश उपयोगकर्ताओं को नई सुविधाओं के बारे में जानकारी प्रदान करते हैं जो कि हो चुकी हैं
किसी भी तरह से पश्चगामी अनुकूलता को तोड़े बिना जोड़ा गया।
निजी या पैकेज दायरे वाले आइटमों में परिवर्तनों पर रिपोर्ट करने के लिए क्लिर्र का उपयोग करते समय, ये
परिवर्तन हमेशा सूचना स्तर में परिवर्तन के रूप में रिपोर्ट किए जाते हैं, कभी भी चेतावनी या त्रुटि स्तर पर नहीं। यह
क्लिर्र के उपयोगकर्ताओं को डेवलपर्स के लिए उपयुक्त स्तर पर "परिवर्तन रिपोर्ट" उत्पन्न करने की अनुमति देता है
उनमें से कुछ परिवर्तनों को बाइनरी असंगतताओं के रूप में चिह्नित (अप्रासंगिक रूप से) किए बिना।
निजी कक्षाओं, विधियों या में परिवर्तन के लिए द्विआधारी असंगतताएं कभी नहीं हो सकतीं
फ़ील्ड क्योंकि वह पहुंच केवल उसी वर्ग के भीतर से हो सकती है (यानी एक ही संकलन
इकाई)।
क्लिर पैकेज-स्कोप्ड आइटम के लिए बाइनरी असंगतता चेतावनी या त्रुटियों की रिपोर्ट नहीं करता है
या तो, क्योंकि जावा पैकेज का उद्देश्य "रिलीज़ इकाइयाँ" होना है, अर्थात सभी वर्ग
एक पैकेज को एक साथ संकलित किया जाता है (अनुकूलता सुनिश्चित करते हुए) फिर एक इकाई के रूप में जारी किया जाता है। केवल
समय है कि पैकेज-स्कोप असंगतताएं संभवतः एक मुद्दा हो सकती हैं जब उपयोगकर्ता
पुस्तकालय कुछ बाहरी से संबंधित पैकेज घोषणा का उपयोग करके अपनी कक्षाएं लिखते हैं
लाइब्रेरी, या जब किसी पैकेज से अद्यतन कक्षाओं (उदाहरण के लिए एक एकल कक्षा) का सबसेट उपयोग किया जाता है
लाइब्रेरी की पिछली रिलीज़ से कुछ कक्षाओं को ओवरराइड करने के लिए। इन दोनों
जावा प्रोग्रामिंग कन्वेंशन द्वारा स्थितियों को बहुत खराब अभ्यास माना जाता है।
निम्नलिखित अनुभागों में, "पुराना" शब्द का उपयोग किसी वर्ग, इंटरफ़ेस, विधि को संदर्भित करने के लिए किया जाता है
या जार के सेट से फ़ील्ड जो पुराने/पिछले/मूल/बेसलाइन संस्करण का प्रतिनिधित्व करता है
पुस्तकालय का निरीक्षण किया जा रहा है। "नया" शब्द का प्रयोग किसी वर्ग, इंटरफ़ेस, को संदर्भित करने के लिए किया जाता है।
जार के सेट से विधि या फ़ील्ड जो नए/वर्तमान/नवीनतम संस्करण का प्रतिनिधित्व करता है
लाइब्रेरी का निरीक्षण किया जा रहा है.
निम्नलिखित अनुभागों में, "प्रकार" शब्द का उपयोग किसी ऐसी चीज़ को संदर्भित करने के लिए किया जाता है जो हो सकती है
या तो एक वर्ग या इंटरफ़ेस।
1000 - बढ़ी हुई दृश्यता of कक्षा
गंभीरता: जानकारी
निर्दिष्ट प्रकार दोनों संस्करणों में मौजूद है, लेकिन इसकी घोषित पहुंच विनिर्देशक के पास है
अन्य कोड किस तक पहुंच सकते हैं, इस पर प्रतिबंधों में ढील देने के लिए परिवर्तन किया गया।
केवल शीर्ष-स्तरीय प्रकार (अर्थात वे जो किसी अन्य वर्ग में नेस्टेड नहीं हैं) हो सकते हैं
"पैकेज" या "सार्वजनिक" पहुंच। नेस्टेड प्रकार चार में से कोई भी ले सकते हैं
उपलब्ध अभिगम्यता मान.
भले ही वस्तु शीर्ष-स्तरीय हो या नेस्टेड, पहुंच में परिवर्तन
अनुक्रम के बाएँ से दाएँ निजी->पैकेज->संरक्षित->सार्वजनिक
यह सुनिश्चित करता है कि सभी कोड जो पहले उस प्रकार तक पहुंच सकते थे, वे अभी भी उस प्रकार तक पहुंच सकते हैं
प्रकार। इसलिए ऐसा परिवर्तन हमेशा बाइनरी और स्रोत-कोड संगत होता है।
ध्यान दें कि घोषणा "संरक्षित" से प्राप्त दोनों कोड तक पहुंच प्रदान करती है
टाइप करें और एक ही पैकेज के भीतर कोड करें, यानी "संरक्षित" पहुंच का भी तात्पर्य है
पैकेज पहुंच.
1001 - में कमी दृश्यता of कक्षा
गंभीरता: त्रुटि
निर्दिष्ट प्रकार दोनों संस्करणों में मौजूद है, लेकिन इसकी घोषित पहुंच विनिर्देशक के पास है
अन्य कोड किस तक पहुंच सकते हैं, इस पर प्रतिबंध कड़ा करने के लिए इसे बदल दिया गया है।
केवल शीर्ष-स्तरीय प्रकार (अर्थात वे जो किसी अन्य वर्ग में नेस्टेड नहीं हैं) हो सकते हैं
"पैकेज" या "सार्वजनिक" पहुंच। नेस्टेड प्रकार चार में से कोई भी ले सकते हैं
उपलब्ध अभिगम्यता मान.
भले ही प्रकार शीर्ष-स्तरीय हो या नेस्टेड, पहुंच में परिवर्तन
अनुक्रम के बाएँ से दाएँ सार्वजनिक->संरक्षित->पैकेज->निजी कारण हो सकता है
मौजूदा कोड जो पहले इस प्रकार तक पहुंच सकता था, अब ऐसा करने में सक्षम नहीं होगा।
जावा भाषा विशिष्टता की धारा 13.4.3 में स्पष्ट रूप से कहा गया है कि
यदि पहले से मौजूद बाइनरी किसी प्रकार तक पहुंचने का प्रयास करता है तो IllegalAccessError उत्पन्न होना चाहिए
जब प्रकार की पहुंच को किसी ऐसी चीज़ में बदल दिया गया है जिसके कारण a
संकलन-समय त्रुटि. हालाँकि यह व्यवहार में लागू होता नहीं दिख रहा है
वर्तमान जेवीएम में कम से कम। फिर भी यह एक त्रुटि होनी चाहिए, और इसलिए क्लिअर रिपोर्ट
यह परिवर्तन बाइनरी-संगतता त्रुटि के रूप में है।
2000 - बदला हुआ से कक्षा सेवा मेरे इंटरफेस
गंभीरता: त्रुटि
निर्दिष्ट वर्ग नए संस्करण में एक इंटरफ़ेस बन गया है। ये बदलाव है
स्पष्ट कारणों से हमेशा बाइनरी और स्रोत-कोड असंगति होती है।
2001 - बदला हुआ से इंटरफेस सेवा मेरे कक्षा
गंभीरता: त्रुटि
निर्दिष्ट इंटरफ़ेस नए संस्करण में एक वर्ग बन गया है। ये बदलाव है
स्पष्ट कारणों से हमेशा बाइनरी और स्रोत-कोड असंगति होती है।
3001 - हटाया अंतिम आपरिवर्तक से कक्षा
गंभीरता: जानकारी
निर्दिष्ट वर्ग को पुराने संस्करण में अंतिम घोषित किया गया था, लेकिन अब वह अंतिम नहीं है
नये संस्करण में.
3002 - जब जोड़ा गया अंतिम आपरिवर्तक सेवा मेरे प्रभावी रूप से अंतिम कक्षा
गंभीरता: जानकारी
निर्दिष्ट वर्ग को पुराने संस्करण में अंतिम घोषित नहीं किया गया था, लेकिन अब घोषित किया गया है
अंतिम। आम तौर पर, यह एक असंगतता होगी क्योंकि पहले से मौजूद व्युत्पन्न
इस वर्ग के नए संस्करण के साथ उपयोग किए जाने पर कक्षाएं मान्य नहीं होंगी।
हालाँकि इस मामले में पुराने वर्ग संस्करण में कोई सार्वजनिक या संरक्षित कंस्ट्रक्टर नहीं था,
इसलिए किसी भी व्युत्पन्न वर्ग का अस्तित्व पुराने संस्करण के लिए भी संभव नहीं था
पुस्तकालय। इसलिए ऐसी कक्षा को फ़ाइनल में बदलने से कोई भी मौजूदा नहीं टूट सकता
कोड।
3003 - जब जोड़ा गया अंतिम आपरिवर्तक सेवा मेरे कक्षा
गंभीरता: त्रुटि
निर्दिष्ट वर्ग को पुराने संस्करण में अंतिम घोषित नहीं किया गया था, लेकिन अब घोषित किया गया है
अंतिम। पहले से मौजूद कोई भी वर्ग जिसे इस वर्ग के उपवर्ग के रूप में घोषित किया गया था
इसलिए लाइब्रेरी के नए संस्करण के साथ मान्य नहीं होगा।
जब a को लोड करने का प्रयास किया जाता है तो क्लासलोडर द्वारा एक VerifyError फेंक दिया जाता है
अंतिम वर्ग का उपवर्ग।
ध्यान दें कि क्लास Y को मानक क्लासलोडर द्वारा तभी लोड किया जाता है जब पहला
Y का एक उदाहरण बनाने या सीधे क्लास को संदर्भित करने का प्रयास किया जाता है
कक्षा Y के लिए ऑब्जेक्ट। यदि किसी अन्य कक्षा X में कक्षा Y घोषित सदस्य के रूप में है, या a के रूप में है
किसी विधि के लिए पैरामीटर, तो कक्षा X लोड करने से कक्षा Y लोड नहीं होती है।
3004 - हटाया सार आपरिवर्तक से कक्षा
गंभीरता: जानकारी
इस वर्ग के पुराने संस्करण को एक अमूर्त वर्ग घोषित किया गया था। नया संस्करण
अमूर्त नहीं है, जो उपयोगकर्ताओं को कक्षा के उदाहरण बनाने की अनुमति देता है।
3005 - जब जोड़ा गया सार आपरिवर्तक सेवा मेरे कक्षा
गंभीरता: त्रुटि
इस वर्ग के पुराने संस्करण को अमूर्त घोषित नहीं किया गया था। नया संस्करण है
अमूर्त। पहले से मौजूद कोड जो इस वर्ग के उदाहरण बनाता है वह अब नहीं है
नये संस्करण के साथ मान्य.
4000 - जब जोड़ा गया इंटरफेस सेवा मेरे la सेट of कार्यान्वित इंटरफेस
गंभीरता: जानकारी
प्रकार का नया संस्करण अब एक अतिरिक्त इंटरफ़ेस लागू करता है। यह नहीं करता
किसी भी मौजूदा कोड (स्रोत या बाइनरी) को अमान्य करें, और यह पूरी तरह से है
पश्चगामी-संगत परिवर्तन.
ध्यान दें कि इस संदेश को बिना किसी बदलाव के रिपोर्ट किया जा सकता है
निर्दिष्ट प्रकार; किसी प्रकार द्वारा समर्थित इंटरफ़ेस के सेट में परिवर्तन का कारण होगा
यह संदेश उस प्रकार के प्रत्येक वंशज के लिए सूचित किया जाना चाहिए।
4001 - हटाया इंटरफेस से la सेट of कार्यान्वित इंटरफेस
गंभीरता: त्रुटि
इस प्रकार के पुराने संस्करण ने घोषणा की कि उसने एक इंटरफ़ेस लागू किया है
नया वर्ग या इंटरफ़ेस नहीं है. मौजूदा कोड जो स्पष्ट रूप से या परोक्ष रूप से डालता है
गायब इंटरफ़ेस के लिए इस प्रकार की वस्तुएं अब मान्य नहीं हैं।
ध्यान दें कि इस संदेश को बिना किसी बदलाव के रिपोर्ट किया जा सकता है
निर्दिष्ट प्रकार; किसी प्रकार द्वारा समर्थित इंटरफ़ेस के सेट में परिवर्तन का कारण होगा
यह संदेश उस प्रकार के प्रत्येक वंशज के लिए सूचित किया जाना चाहिए।
5000 - जब जोड़ा गया कक्षा सेवा मेरे la सेट of सुपर-क्लास
गंभीरता: जानकारी या चेतावनी
वर्ग के नए संस्करण में विरासत पदानुक्रम में एक वर्ग है जो पुराना है
संस्करण ने ऐसा नहीं किया, क्योंकि या तो इसका प्रत्यक्ष जनक अब एक अलग वर्ग है, या
क्योंकि इसके मूल वर्गों में से एक ने अपनी विरासत पदानुक्रम को बदल दिया है।
यदि निर्दिष्ट वर्ग में पूर्वज के रूप में java.lang.Throwable है, तो यह परिवर्तन है
एक चेतावनी के रूप में रिपोर्ट किया गया, क्योंकि यह वर्ग परिवर्तन अपवाद-पकड़ने को बदल सकता है
इस वर्ग का उपयोग करने वाले प्रोग्रामों का व्यवहार।
ध्यान दें कि इस संदेश को बिना किसी बदलाव के रिपोर्ट किया जा सकता है
निर्दिष्ट वर्ग; पूर्वज वर्ग के सुपरक्लास के सेट में परिवर्तन होगा
इस संदेश को प्रत्येक वंशज वर्ग के लिए रिपोर्ट करने का कारण बनें।
5001 - हटाया कक्षा से la सेट of सुपर-क्लास
गंभीरता: त्रुटि
इस वर्ग के पुराने संस्करण में विरासत पदानुक्रम में एक वर्ग है जो कि
नया संस्करण ऐसा नहीं करता है, या तो क्योंकि इसका प्रत्यक्ष अभिभावक अब एक अलग वर्ग है, या
क्योंकि इसके मूल वर्गों में से एक ने अपनी विरासत पदानुक्रम को बदल दिया है।
मौजूदा कोड जो स्पष्ट रूप से या परोक्ष रूप से इस प्रकार की वस्तुओं को वर्तमान में डालता है
गुम वर्ग प्रकार अब मान्य नहीं है.
ध्यान दें कि इस संदेश को बिना किसी बदलाव के रिपोर्ट किया जा सकता है
निर्दिष्ट वर्ग; पूर्वज वर्ग के सुपरक्लास के सेट में परिवर्तन होगा
इस संदेश को प्रत्येक वंशज वर्ग के लिए रिपोर्ट करने का कारण बनें।
यह भी ध्यान दें कि यदि इस वर्ग के वंश में थ्रोएबल है, तो वर्ग
पदानुक्रम परिवर्तन के कारण अपवाद-पकड़ने वाले व्यवहार में भी परिवर्तन हो सकता है
इस वर्ग का उपयोग करने वाले प्रोग्राम।
6000 - जब जोड़ा गया खेत
गंभीरता: जानकारी
नई कक्षा में एक अतिरिक्त स्थैतिक या इंस्टेंस सदस्य है। ये बदलाव है
पूरी तरह से पीछे की ओर संगत।
6001 - हटाया खेत
गंभीरता: त्रुटि
नई कक्षा ने पुराने संस्करण में मौजूद फ़ील्ड को हटा दिया है। पहले से मौजूद कोड
जो सीधे उस फ़ील्ड तक पहुंचता है वह अब मान्य नहीं होगा।
6002 - वैल्यू of खेत नहीं लंबे समय तक a संकलन समय स्थिर
गंभीरता: चेतावनी
कक्षा के पुराने संस्करण के विरुद्ध संकलित कोड को "इनलाइन" करने की अनुमति दी गई थी
इस फ़ील्ड का मान क्योंकि यह एक संकलन-समय स्थिरांक था। इसलिए, विद्यमान
बाइनरी कोड नए के बजाय इस फ़ील्ड के पुराने मान का उपयोग करना जारी रखेगा
मान (जिसे रेखांकित नहीं किया जा सकता)।
6003 - वैल्यू of संकलन समय स्थिर है बदल
गंभीरता: चेतावनी
कक्षा के पुराने संस्करण के विरुद्ध संकलित कोड को "इनलाइन" करने की अनुमति दी गई थी
इस फ़ील्ड का मान क्योंकि यह एक संकलन-समय स्थिरांक था। इसलिए, विद्यमान
बाइनरी कोड नए के बजाय इस फ़ील्ड के पुराने मान का उपयोग करना जारी रखेगा
मूल्य.
6004 - क्षेत्र टाइप बदल
गंभीरता: त्रुटि
निर्दिष्ट स्थैतिक या निर्दिष्ट उदाहरण सदस्य से संबद्ध प्रकार
वर्ग बदल गया है. पहले से मौजूद कोड जो सीधे उस फ़ील्ड तक पहुंचता है, नहीं हो सकता है
अब वैध रहेगा, और इसलिए यह एक असंगत परिवर्तन है।
6005 - क्षेत्र अभी गैर अंतिम
गंभीरता: जानकारी
यह क्षेत्र पहले अंतिम था, और अब अंतिम नहीं है। इसका मतलब यह है कि मैदान
मान को अब वर्ग या उदाहरण के जीवनकाल के दौरान संशोधित किया जा सकता है।
क्या किसी फ़ील्ड में कोई मान पहले अन्य वर्गों में "इनलाइन" किया जा सकता था, यह एक प्रश्न है
समस्या का समाधान संदेश 6002 और 6003 द्वारा किया गया है, इस संदेश द्वारा नहीं।
6006 - क्षेत्र अभी अंतिम
गंभीरता: त्रुटि
फ़ील्ड को अब वर्ग या उदाहरण के जीवनकाल के दौरान संशोधित नहीं किया जा सकता है।
इसलिए, जिस कोड ने पहले इस फ़ील्ड को संशोधित किया था वह अब मान्य नहीं है।
6007 - क्षेत्र अभी गैर स्थिर
गंभीरता: त्रुटि
फ़ील्ड अब क्लास वेरिएबल के बजाय एक इंस्टेंस वेरिएबल है। कोड जो
पहले इस फ़ील्ड को क्लास के उदाहरण के बजाय क्लास के माध्यम से एक्सेस किया जाता था
अब मान्य नहीं है।
6008 - क्षेत्र अभी स्थिर
गंभीरता: त्रुटि
फ़ील्ड अब इंस्टेंस वेरिएबल के बजाय एक क्लास वेरिएबल है।
किसी कारण से (संभवतः आंतरिक कार्यान्वयन मुद्दे), जावा मानक
घोषणा करता है कि यह परिवर्तन बाइनरी-संगत नहीं है, और वह
यदि कोड "पुराने" के विरुद्ध संकलित किया गया है तो IncompatibleClassChangeError फेंक दिया जाएगा
किसी वर्ग के संस्करण का उपयोग "नए" संस्करण के साथ किया जाता है जिसके लिए एक फ़ील्ड अब है
स्थिर।
क्योंकि स्रोत कोड को उसके उदाहरणों के माध्यम से वर्ग चर तक पहुंचने की अनुमति है
वर्ग, यह एक स्रोत-कोड संगत परिवर्तन होने की उम्मीद है। हालाँकि वर्तमान में
CLIRR इसे स्रोत-कोड संगतता के लिए भी एक त्रुटि के रूप में रिपोर्ट करता है।
6009 - क्षेत्र अधिक सुलभ
गंभीरता: जानकारी
नए संस्करण में, निर्दिष्ट फ़ील्ड पहले की तुलना में अधिक कोड तक पहुंच योग्य है
पहले से।
6010 - क्षेत्र कम सुलभ
गंभीरता: त्रुटि
नए संस्करण में, निर्दिष्ट फ़ील्ड पहले की तुलना में कम कोड तक पहुंच योग्य है
पहले. इसलिए मौजूदा कोड अब मान्य नहीं हो सकता है.
6011 - हटाया स्थिर क्षेत्र
बाइनरी गंभीरता: चेतावनी
स्रोत गंभीरता: त्रुटि
नई कक्षा ने पुराने संस्करण में मौजूद फ़ील्ड को हटा दिया है। पहले से मौजूद स्रोत
वह कोड जो सीधे उस फ़ील्ड तक पहुंचता है, अब मान्य नहीं होगा।
हालाँकि, पहले, फ़ील्ड अंतिम था और एक स्थिर मान के साथ आरंभ किया गया था।
इसलिए कक्षा के पिछले संस्करण के विरुद्ध संकलित कोड इनलाइन हो जाएगा
यह स्थिरांक और इस क्षेत्र के पिछले मान का उपयोग करके काम करना जारी रखेगा। ए
चेतावनी जारी की जाती है क्योंकि यह अक्सर वांछनीय व्यवहार नहीं है। हालाँकि यह एक नहीं है
द्विआधारी असंगति.
7000 - विधि अभी in सुपर क्लास
गंभीरता: जानकारी
पुराने वर्ग में X नाम की एक विधि थी। नए वर्ग में अब यह विधि नहीं है, बल्कि a है
मूल वर्ग इस पद्धति को परिभाषित करता है, इसलिए इसमें कोई बाइनरी या स्रोत असंगति नहीं है
हुआ.
ध्यान दें कि इस परिवर्तन का प्रभाव नए वर्ग को बनने के लिए मजबूर करने पर पड़ सकता है
'अमूर्त'। यदि ऐसा है, तो इस परिवर्तन की सूचना अलग से दी जाती है।
7001 - विधि अभी in इंटरफेस
गंभीरता: जानकारी
पुराने वर्ग या इंटरफ़ेस में पहले X नामक एक विधि थी। नए वर्ग या
इंटरफ़ेस में अब यह विधि नहीं है, लेकिन मूल इंटरफ़ेस इसे परिभाषित करता है
विधि, इसलिए कोई बाइनरी या स्रोत असंगति उत्पन्न नहीं हुई है।
ध्यान दें कि इस परिवर्तन का प्रभाव नए वर्ग को बनने के लिए मजबूर करने पर पड़ सकता है
'अमूर्त'। यदि ऐसा है, तो इस परिवर्तन की सूचना अलग से दी जाती है।
7002 - विधि हटाया
गंभीरता: त्रुटि
पुराने वर्ग या इंटरफ़ेस में X नामक एक विधि थी। नए वर्ग या इंटरफ़ेस नं
अब यह विधि मौजूद है, और यह विधि किसी मूल वर्ग या पर परिभाषित नहीं है
interface.
इस परिवर्तन के लिए रनटाइम पर वास्तव में कोई त्रुटि होती है या नहीं, यह उपयोग पर निर्भर करता है
पैटर्न. संशोधित वर्ग का उपयोग मौजूदा कोड के साथ तब तक किया जा सकता है
मौजूदा कोड हटाई गई विधि को कॉल करने का प्रयास नहीं करता है। यदि लापता को एक कॉल
विधि बनाई जाती है, तो विधि होने पर NoSuchMethodError अपवाद उत्पन्न होता है
मंगलाचरण होता है.
7003 - विधि अवहेलना हटाया
गंभीरता: जानकारी
पुराने वर्ग या इंटरफ़ेस पर निर्दिष्ट विधि विरासत में मिली विधि को ओवरराइड कर रही थी
परिभाषा। नई कक्षा या इंटरफ़ेस में अब यह विधि स्पष्ट रूप से नहीं है
इस पर घोषित किया गया है, लेकिन यह अभी भी एक परिभाषा प्राप्त करता है इसलिए इसमें कोई बाइनरी नहीं है
असंगति. 7004 - विधि तर्क गणना परिवर्तित
गंभीरता: त्रुटि
निर्दिष्ट विधि में तर्क जोड़े या हटा दिए गए हैं। इसका मतलब है वह कोड जो
पहले लागू की गई यह अब उसी विधि को लागू नहीं करेगी।
यदि पुराने प्रोटोटाइप के साथ विरासत में मिली विधि परिभाषा है, तो नहीं है
द्विआधारी असंगति; कोड जो इसके पुराने संस्करण के विरुद्ध संकलित किया गया था
क्लास अब विरासत में मिले कार्यान्वयन को लागू करेगा। इस स्थिति में, क्लिअर को चाहिए
किसी त्रुटि के बजाय एक जानकारी संदेश आउटपुट करें। हालाँकि वर्तमान तिथि पर, clirr
इस स्थिति की जाँच नहीं करता.
यदि पुराने प्रोटोटाइप के साथ कोई विरासत विधि परिभाषा नहीं है, तो परिवर्तन
एक द्विआधारी असंगति है.
7005 - विधि तर्क प्रकार बदल
बाइनरी गंभीरता: जानकारी या त्रुटि
स्रोत गंभीरता: त्रुटि
निर्दिष्ट विधि में इसके एक या अधिक तर्कों के प्रकार को संशोधित किया गया है।
इसका मतलब यह है कि कक्षा के पुराने संस्करण के विरुद्ध संकलित कोड अब नहीं होगा
उसी विधि का आह्वान करें. हालाँकि, संकलित होने पर बिल्कुल वही पुराना स्रोत कोड
यदि तर्क प्रकार हैं तो नए वर्ग संस्करण के विरुद्ध इस पद्धति को लागू किया जा सकता है
असाइनमेंट-संगत।
यदि पुराने प्रोटोटाइप के साथ विरासत में मिली विधि परिभाषा है, तो नहीं है
द्विआधारी असंगति; कोड जो इसके पुराने संस्करण के विरुद्ध संकलित किया गया था
क्लास अब विरासत में मिले कार्यान्वयन को लागू करेगा। वर्तमान तिथि पर, क्लिर्र करता है
इस स्थिति की जाँच न करें.
यदि पुराने प्रोटोटाइप के साथ कोई विरासत विधि परिभाषा नहीं है, तो परिवर्तन
एक द्विआधारी असंगति है.
यदि पैरामीटर प्रकार बदले गए तो सभी को उनके पिछले सुपरटाइप में बदल दिया गया
घोषित प्रकार, या आदिम पैरामीटर प्रकारों के लिए यदि उन्हें "बड़े" में बदल दिया गया था
प्रत्येक मामले में प्रकार, तो नया कोड पिछले के साथ स्रोत-कोड-संगत है
भले ही यह बाइनरी-संगत न हो, रिलीज़ करें। ध्यान दें कि इस स्थिति में,
लाइब्रेरी का उपयोग करने वाले कोड को पुनः संकलित करने से कॉल करने से उसका व्यवहार बदल सकता है
क्लास पर एक विधि को कॉल करने के लिए विरासत में मिली विधि जो थोड़ी अलग है
प्रोटोटाइप. वर्तमान तिथि पर, क्लिर्र इस स्थिति की जाँच नहीं करता है।
7006 - विधि वापसी प्रकार बदल
बाइनरी गंभीरता: त्रुटि
स्रोत गंभीरता: जानकारी या त्रुटि
निर्दिष्ट विधि का घोषित रिटर्न प्रकार बदल गया है। चाहे कोई समस्या हो
वास्तव में इसके पुराने संस्करण के विरुद्ध संकलित कोड का उपयोग करते समय रनटाइम पर होता है
लाइब्रेरी उपयोग पैटर्न पर निर्भर करती है। पुराना कोड इस वर्ग पर अन्य विधियों को कॉल कर सकता है।
हालाँकि, उस विधि को कॉल करने का कोई भी प्रयास जिसका रिटर्न प्रकार बदल गया है, परिणामित होगा
जब विधि लागू की जाती है तो NoSuchMethodError फेंक दिया जाता है, क्योंकि return
प्रकार "विधि हस्ताक्षर" का हिस्सा है।
परिवर्तन स्रोत-कोड-संगत है यदि और केवल तभी जब नया रिटर्न प्रकार हो
पुराने रिटर्न प्रकार के लिए असाइन करने योग्य। इस का मतलब है कि:
यदि पुराना रिटर्न प्रकार एक आदिम प्रकार था, तो नया रिटर्न प्रकार भी होना चाहिए
पुराने प्रकार की तुलना में संकीर्ण.
यदि पुराना रिटर्न प्रकार एक इंटरफ़ेस था, तो नया रिटर्न प्रकार एक इंटरफ़ेस होना चाहिए
क्लास या इंटरफ़ेस जो पुराने रिटर्न प्रकार को लागू करता है।
यदि पुराना रिटर्न प्रकार एक वर्ग था, तो नया रिटर्न प्रकार एक उपवर्ग होना चाहिए
पहले लौटाए गए प्रकार का।
क्लिर्र वर्तमान में विधि में परिवर्तन के लिए स्रोत-कोड संगतता की जांच नहीं करता है
वापसी के प्रकार; वर्तमान में इन्हें केवल त्रुटि के रूप में रिपोर्ट किया जाता है।
7007 - विधि है किया गया पदावनत
गंभीरता: जानकारी
निर्दिष्ट विधि को "बहिष्कृत" घोषित किया गया है। यह हमेशा एक है
बाइनरी-संगत परिवर्तन के साथ-साथ स्रोत-कोड-संगत परिवर्तन।
7008 - विधि है किया गया अघोषित
गंभीरता: जानकारी
निर्दिष्ट विधि को पिछले संस्करण में "बहिष्कृत" घोषित किया गया था, लेकिन ऐसा नहीं है
वर्तमान रिलीज़ में लंबे समय तक पदावनत किया गया। हालांकि यह थोड़ा असामान्य है
अनुमति है। यह परिवर्तन हमेशा बाइनरी-संगत परिवर्तन के साथ-साथ एक भी होता है
स्रोत-कोड-संगत परिवर्तन।
7009 - विधि is अभी कम सुलभ
गंभीरता: त्रुटि
निर्दिष्ट विधि से जुड़ी पहुंच अनुमतियाँ कड़ी कर दी गई हैं
विधि तक पहुँचने के लिए कम उपयोगकर्ता कोड की अनुमति दें।
यह परिवर्तन स्रोत-कोड संगतता समस्या है या नहीं, यह इस पर निर्भर करता है
उपयोग के पैटर्न.
यह परिवर्तन एक द्विआधारी असंगति होना चाहिए. हालाँकि, ध्यान दें कि वर्तमान JVM ऐसा करते हैं
इसे मान्य नहीं करें. किसी क्लास कैन के पिछले संस्करण के विरुद्ध संकलित कोड
उन तरीकों को सफलतापूर्वक लागू करें जिनके लिए अब उनके पास पहुंच अधिकार नहीं हैं।
फिर भी, जावा भाषा विशिष्टता बताती है कि यह एक त्रुटि है, इसलिए
क्लिर इस परिवर्तन को बाइनरी असंगति के रूप में रिपोर्ट करता है।
7010 - विधि is अभी अधिक सुलभ
गंभीरता: जानकारी
निर्दिष्ट विधि से जुड़ी एक्सेस अनुमतियाँ ढीली कर दी गई हैं
विधि तक पहुँचने के लिए अधिक उपयोगकर्ता कोड की अनुमति दें। यह हमेशा एक बाइनरी और सोर्स-कोड होता है
संगत परिवर्तन.
7011 - विधि जब जोड़ा गया
गंभीरता: जानकारी
निर्दिष्ट वर्ग में एक गैर-सार विधि जोड़ी गई है। यह हमेशा एक है
बाइनरी-संगत परिवर्तन।
यह एक स्रोत-कोड संगत परिवर्तन भी है।
प्रश्न: यदि नई विधि विरासत में मिली विधि को ओवरराइड करती है, तो कौन सा संस्करण कोड करता है
पुराने पुस्तकालय आह्वान के विरुद्ध संकलित?
7012 - विधि जब जोड़ा गया सेवा मेरे इंटरफेस
बाइनरी गंभीरता: त्रुटि
स्रोत गंभीरता: त्रुटि
निर्दिष्ट इंटरफ़ेस में एक विधि घोषणा जोड़ी गई है। ऐसा हमेशा होता है
इसे बाइनरी-संगतता त्रुटि के रूप में रिपोर्ट किया गया है, लेकिन व्यवहार में परिवर्तित वर्ग हो सकता है
पुराने इंटरफ़ेस के आधार पर संकलित कोड के साथ सफलतापूर्वक उपयोग किया जा सकता है
उपयोग पैटर्न.
पुराना कोड जो नए के विरुद्ध संकलित कोड पर विधियों को आमंत्रित करता है (विस्तारित)
इंटरफ़ेस बिना किसी समस्या के काम करता रहेगा. और पुराना कोड जो लागू करता है
इंटरफ़ेस का पुराना संस्करण भी तब तक सही ढंग से काम करता रहेगा जब तक नहीं
कोड उस उदाहरण के विरुद्ध किसी भी नए जोड़े गए तरीकों को लागू करने का प्रयास करता है। लेकिन
कोड जो (वैध रूप से) इंटरफ़ेस में एक के विरुद्ध नई विधियों में से एक को आमंत्रित करता है
ऑब्जेक्ट जो केवल इंटरफ़ेस के पुराने संस्करण को लागू करता है, एक का कारण बनेगा
जिस समय विधि मंगलाचरण का प्रयास किया जाता है उस समय AbstractMethodError फेंकी जाएगी।
इंटरफ़ेस में एक विधि जोड़ना हमेशा एक त्रुटि के रूप में रिपोर्ट किया जाता है, क्योंकि class
उस इंटरफ़ेस को लागू करने के लिए अब घोषित को लागू करने के लिए संशोधित किया जाना चाहिए
विधि.
7013 - सार विधि जब जोड़ा गया सेवा मेरे वर्ग
बाइनरी गंभीरता: त्रुटि
स्रोत गंभीरता: त्रुटि
निर्दिष्ट वर्ग में एक अमूर्त विधि घोषणा जोड़ी गई है। यह है
हमेशा एक बाइनरी-संगतता त्रुटि के रूप में रिपोर्ट किया जाता है, लेकिन व्यवहार में परिवर्तित वर्ग
पुराने वर्ग के आधार पर संकलित कोड के साथ सफलतापूर्वक उपयोग किया जा सकता है
उपयोग पैटर्न.
यदि पुराने वर्ग के विरुद्ध संकलित वस्तुओं के उदाहरण बनाए जाते हैं, तो उनका
विधियों को बिना किसी समस्या के लागू किया जा सकता है। लेकिन अगर नई जोड़ी गई अमूर्त विधि है
कभी भी लागू किया जाता है, तो विधि के समय एक AbstractMethodError फेंक दिया जाता है
आह्वान का प्रयास किया गया है।
7014 - विधि अभी अंतिम
गंभीरता: त्रुटि
यह विधि पहले गैर-अंतिम थी, और अब अंतिम है। इस वर्ग के उपवर्ग
अब संकलित या चलायी नहीं जायेगी.
जब पुराने वर्ग में यह विधि अंतिम थी (स्पष्ट रूप से या केवल प्रदान करके)।
निजी कंस्ट्रक्टर) तो उपवर्ग मौजूद नहीं हो सकते। क्लिर्र वर्तमान में जाँच नहीं करता है
इस स्थिति के लिए, इसलिए यह कुछ कोने के मामलों में गलत अलार्म बजाएगा।
7015 - विधि अभी गैर अंतिम
गंभीरता: जानकारी
यह विधि पहले अंतिम थी, और अब गैर-अंतिम है। यह हमेशा एक है
बाइनरी-संगत परिवर्तन।
8000 - वर्ग जब जोड़ा गया
गंभीरता: जानकारी
लाइब्रेरी के नए संस्करण में एक क्लास है जो पुराने में मौजूद नहीं थी
संस्करण.
8001 - वर्ग हटाया
गंभीरता: त्रुटि
लाइब्रेरी के नए संस्करण में अब निर्दिष्ट वर्ग शामिल नहीं है।
उदाहरण
पिछले संस्करण के साथ लाइब्रेरी की अनुकूलता की जाँच करें:
clirr -o foo-1.0.jar -n foo-2.0.jar
अपाचे कॉमन्स लॉगिंग के आधार पर नई लाइब्रेरी की बैकवर्ड संगतता की जाँच करें:
clirr -o foo-1.0.jar -n foo-2.0.jar -ocp /usr/share/java/commons-logging.jar -ncp
/usr/share/java/commons-log.jar
HOMEPAGE
http://clirr.sourceforge.net
नवम्बर 2013 क्लिर(1)
onworks.net सेवाओं का उपयोग करके ऑनलाइन क्लिर्र का उपयोग करें