2008-09-17 13 views
5

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

मुझे दो .class फ़ाइलों को एक तरफ मिल गया है, जो वर्तमान में चल रहे संस्करण से निकाला गया है और विक्रेता से अपडेट किया गया है। JAD और JReversePro दोनों संस्करणों को एक ही आउटपुट में दो संस्करणों को क्रमशः पृथक और पृथक (क्रमशः) करते हैं। हालांकि, .class फ़ाइलें अलग-अलग आकार हैं और मुझे od -x के आउटपुट में अंतर दिखाई देता है, इसलिए वे निश्चित रूप से समान नहीं हैं।

दो फाइलों के बीच अंतर निर्धारित करने के लिए मैं और क्या कदम उठा सकता हूं?


निष्कर्ष:

महान प्रतिक्रिया के लिए धन्यवाद। चूंकि javap -c आउटपुट दो वर्ग फ़ाइलों के लिए भी समान है, इसलिए मैं निष्कर्ष निकालने जा रहा हूं कि दावर का अधिकार और विक्रेता ने मुझे एक प्लेसबो भेजा था। जबकि मैं उस कारण से डेवर के जवाब को स्वीकार कर रहा हूं, यह क्रिस मार्शल और जॉन मेघर था जिसने मुझे जवाप में बदल दिया, इसलिए आप सभी तीनों के लिए धन्यवाद।

उत्तर

6

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

1

आप विघटित स्रोतों पर एक diff टूल (जैसे SourceGear के निःशुल्क डिफमेज टूल) का उपयोग करने का प्रयास कर सकते हैं। उसमें फ़ाइल मतभेदों को उठाया जाना चाहिए, हालांकि यह संभवतः "महत्वहीन" अंतर उठाएगा, उदाहरण के लिए यदि दो संस्करणों में चर का नाम अलग-अलग रखा गया है।

http://www.sourcegear.com/diffmerge/

1

आप जावा .class फ़ाइलों डिकंपाइल करने के लिए ($ JDK_HOME/बिन में) javap उपयोग कर सकते हैं। यह आपको बताएगा (उदाहरण के लिए) अन्य चीजों के साथ वर्ग फ़ाइल संस्करण

6

यदि आप API स्तर के अंतर की तलाश में हैं तो javap उपकरण एक बड़ी सहायता हो सकती है। यह विधि हस्ताक्षर आउटपुट करेगा और वे एक सादे पाठ फ़ाइलों के लिए आउटपुट हो सकते हैं और सामान्य diff उपकरण का उपयोग करके तुलना कर सकते हैं।

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