आपकी नई पैक की गई लाइब्रेरी पुराने संस्करण के साथ बैकवर्ड बाइनरी संगत (BC) नहीं है। इस कारण से कुछ लाइब्रेरी क्लाइंट्स जो पुनर्नवीनीकरण नहीं किए गए हैं अपवाद छोड़ सकते हैं।
यह जावा लाइब्रेरी एपीआई में बदलावों की एक पूरी सूची है जो कि java.lang को फेंकने के लिए लाइब्रेरी के पुराने संस्करण के साथ निर्मित क्लाइंट का कारण हो सकता है। यदि वे एक नए (यानी ई.पू. तोड़कर) पर चलते हैं तो असंगत है।
- गैर-अंतिम क्षेत्र स्थिर हो जाता है,
- गैर-स्थिर क्षेत्र गैर-स्थिर हो जाता है,
- क्लास इंटरफ़ेस बन गया,
- इंटरफ़ेस कक्षा बन गया,
- यदि आप वर्ग / इंटरफ़ेस में एक नया फ़ील्ड जोड़ते हैं (या नया सुपर-क्लास / सुपर-इंटरफ़ेस जोड़ते हैं) तो क्लाइंट क्लास C के सुपर-इंटरफ़ेस से एक स्थिर फ़ील्ड एक जोड़ा फ़ील्ड (उसी नाम से) को विरासत में मिला हो सकता है C का सुपर-क्लास (बहुत दुर्लभ मामला)।
नोट : कई हैं अन्य अपवाद : अन्य असंगत परिवर्तन के कारण NoSuchFieldError , NoSuchMethodError , IllegalAccessError , InstantiationError , VerifyError , NoClassDefFoundError और AbstractMethodError ।
बीसी के बारे में बेहतर पेपर "डेसिंग-बेस्ड जावा-आधारित एपीआई 2: अचीविंग एपीआई बाइनरी कम्पेटिबिलिटी" जिम डे रिविरेस द्वारा लिखा गया है।
ऐसे परिवर्तनों का पता लगाने के लिए कुछ स्वचालित उपकरण भी हैं :
अपने पुस्तकालय के लिए जापी-अनुपालन-चेकर का उपयोग:
japi-compliance-checker OLD.jar NEW.jar
क्लिरर टूल का उपयोग:
java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar
सौभाग्य!