2011-01-03 15 views
7

मैं एक बिल्ड प्रक्रिया को संशोधित कर रहा हूं और मुझे दो .ear फ़ाइलों की सामग्री की पूरी तुलना करने की आवश्यकता है। इसका मतलब है कि प्रत्येक संग्रह को आंसू में दोबारा तुलना करना। ये .ear फ़ाइलों में अभिलेखागार होते हैं जिनमें अभिलेखागार होते हैं।दो .ear फ़ाइलों की तुलना करने के लिए एक उपकरण की आवश्यकता है

मैंने तुलना और पुरालेख विश्लेषक से परे देखा है, लेकिन वे एक समय में केवल एक स्तर करते हैं। मुझे प्रत्येक संग्रह में मैन्युअल रूप से ड्रिल करना होगा। मैं कुछ और अधिक स्वचालित खोज रहा हूँ।

ग्रहण और अल्ट्रा कॉम्पारे दो की बाइनरी तुलना करते हैं। जो मैं नहीं चाहता हूं।

क्या ऐसा कोई उपकरण मौजूद है?

+0

मैं तुलना समर्थन से परे संपर्क करने का सुझाव दूंगा। वे मेरे अनुभव में बहुत ही संवेदनशील हैं, और मदद करने में सक्षम हो सकते हैं। – TrueWill

उत्तर

3

मेरी समस्या अभी भी .ear फ़ाइल को फिर से विस्तारित करने से अधिक होने के लिए बाहर निकली है (मैंने ऐसा करने के लिए एक जावा क्लास लिखा - रिकर्सन ने इसे सरल बना दिया।) एक बार .ear फ़ाइलों का विस्तार हो जाने के बाद मुझे निर्देशिकाओं को जांचने के लिए अलग करना होगा किसी भी बदलाव के लिए। यदि टाइमस्टैम्प के अलावा कुछ भी बदल गया तो मुझे पता है कि निर्माण एक अलग बाइनरी का उत्पादन कर रहा है।

दूसरी समस्या यह है कि हमारी निर्माण प्रक्रिया सैकड़ों .xml फ़ाइलों को उत्पन्न करती है और बाद में विभिन्न ऑर्डर में तत्वों के साथ उन .xml फ़ाइलों को पुन: उत्पन्न करती है। मुझे यकीन नहीं है क्यों। जब मैं बैक-टू-बैक बिल्ड द्वारा बनाई गई दो .ear फ़ाइलों का विस्तार करता हूं, जिसके परिणामस्वरूप निर्देशिकाओं के किसी भी बदलाव में कोई परिवर्तन नहीं होता है, तो सैकड़ों .xml फ़ाइलों को diffs के साथ दिखाता है, भले ही वे कार्यात्मक रूप से समकक्ष हों।

.ear फ़ाइलों को दोबारा विस्तारित करने के अतिरिक्त मुझे एक diff करने और कुछ निर्देशिकाओं में .xml फ़ाइलों को बाहर करने की आवश्यकता है। मैंने सोचा था कि Cygwin diff ऐसा करने होगा, लेकिन --exclude स्विच किसी भी पथ जानकारी को नहीं पहचानता है:

Cygwin diff won't exclude files if a directory is included in the pattern

मैं इस के लिए एक समाधान मैं के लिए एक और जावा वर्ग लिखेंगे नहीं मिलती है तो प्रत्येक निर्देशिका में एक एकल स्तर diff करने और उचित निर्देशिका में .xml फ़ाइलों को छोड़कर पूरी निर्देशिका संरचना के माध्यम से कदम।

मुझे लगता है कि मैं पहिया का पुन: आविष्कार कर रहा हूं, लेकिन मुझे अभी एक पहिया नहीं मिल रहा है।

+6

diffing करने के लिए एक अस्थायी गिट भंडार का उपयोग करने के बारे में कैसे? पहले निकालें।कान फ़ाइल और सबकुछ जोड़ें और चेक-इन करें, दूसरी .ear फ़ाइल निकालें, अब आप गिट को भिन्नता दे सकते हैं। –

+0

धन्यवाद मैक्स। अच्छा हैक। मैंने कान, जार और युद्ध मॉड्यूल का विस्तार किया। सभी फाइलों में जांच की गई और गिट diff इस्तेमाल किया। –

1

तुलना में परे Session Settings संवाद में जाएं, और Handling टैब पर Archive Handling विकल्प है। यदि यह As folders always बीसी पर सेट है तो यह संग्रह फ़ोल्डरों की तरह अभिलेखागार का इलाज करेगा, इसलिए यह पूरी तरह से रिकर्सिव है।

+0

ऐसा लगता है कि यह बार-बार काम करता है, लेकिन कोई आउटपुट नहीं है। मुझे बस एक टाइमस्टैंप मिलता है और "44410 वस्तुओं की सफलतापूर्वक तुलना की गई। 35.9 सेकेंड में पूर्ण।" दो .ear फ़ाइलों के बीच कुछ अंतर हैं, लेकिन उन्हें रिपोर्ट नहीं मिली है। अगर मैं संग्रह संरचना में ड्रिल करता हूं तो यह अंतर के साथ फाइलें दिखाता है। मुझे पूरे पेड़ में मैन्युअल रूप से ड्रिल किए बिना एक diff रिपोर्ट प्राप्त करने की आवश्यकता है। –

+0

मान लीजिए कि आप एक स्क्रिप्ट लिख रहे हैं, अगर आप सिर्फ फाइलों की सूची चाहते हैं तो 'FOLDER-REPORT' कमांड' का उपयोग करें। यदि आप फ़ाइलों के भीतर विवरण चाहते हैं तो 'सभी का विस्तार करें' का उपयोग करें, 'DIFF.FILES NEWER.FILES OLDER.FILES ORPHAN.FILES' चुनें, फिर' फ़ाइल-रिपोर्ट 'चुनें। फ़ाइल/फ़ोल्डर-रिपोर्ट दोनों को सहायता में शामिल अतिरिक्त पैरामीटर की आवश्यकता होती है। आप परिणामस्वरूप रिपोर्ट को HTML या सादा पाठ फ़ाइल में लिख सकते हैं। –

+0

मैं एक बीसी लिपि नहीं लिख रहा था। मैंने आखिरकार एक आइर फ़ाइल और इसमें मौजूद सभी अभिलेखागार का विस्तार करने के लिए एक जावा प्रोग्राम लिखने का फैसला किया। –

5

zipdiff एक बहुत अच्छा ओपन सोर्स समाधान प्रदान करता है।

+0

zipdiff अच्छा है लेकिन लिनक्स पर अच्छा काम नहीं करेगा क्योंकि एमएस विंडोज पथ की उम्मीद है – onknows