2010-11-19 18 views
15

एक मौजूदा एप्लिकेशन में अपने क्लासपाथ में जार फ़ाइलों का एक टन है। शुरुआत में बस किसी ने सभी जेएआर को निश्चित रूप से जोड़ा होगा। कुछ जारों का स्पष्ट रूप से उपयोग नहीं किया जा रहा था और हमने बिना किसी समस्या के इन अनियंत्रित जारों में से कुछ को हटा दिया है।किसी अनुप्रयोग में कौन से जेएआर का उपयोग किया जाता है यह निर्धारित करने के लिए

कोई कैसे निर्धारित करता है कि कौन से जेएआर का उपयोग किया जा रहा है और कौन से अनियंत्रित हैं (परीक्षण और त्रुटि विधि के अलावा)?

उत्तर

7

Tattletale इसके लिए एक शानदार उपकरण है। यह बाइटकोड पर काम करता है, इसलिए यह संभव है कि कुछ वर्ग प्रतिबिंब के माध्यम से उपयोग करें और रिपोर्ट में नहीं आएंगे।

Here (लिंक अब काम करता है) एक उदाहरण रिपोर्ट है। जैसा कि आप देख सकते हैं, आपके पास केवल वह सुविधा है जिसे आप ढूंढ रहे हैं "अप्रयुक्त JAR"।

+0

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

5

पता है कि परीक्षण और त्रुटि अकेले एक समस्या हो सकती है, खासकर यदि आवेदन भार वर्गों गतिशील (जैसे Class.forName) एक जार को हटाने के रूप में शुरू से आवेदन तक नहीं पहुंच पाएंगे नहीं और (जाहिरा तौर पर) ठीक से काम है, लेकिन यह विफल हो सकता है हो सकता है बाद में यदि लक्षित कक्षाएं नहीं मिलती हैं।

इसके अलावा, ऐसे कई टूल हैं जिनका उपयोग जावा एप्लिकेशन का विश्लेषण करने और निर्भरताओं को खोजने के लिए किया जा सकता है (मैंने Dependency Finder स्वयं का उपयोग किया है, हालांकि वास्तव में इस उद्देश्य के लिए नहीं), हालांकि ध्यान दें कि उनमें से अधिकतर कक्षाएं नहीं ढूंढ पाएंगे जैसा ऊपर वर्णित अनुसार गतिशील रूप से लोड किया गया है।

+0

सहमत हुए। यदि वे गतिशील रूप से लोड होते हैं तो कोई भी स्वचालित टूल संभावित रूप से उनमें से कुछ को याद कर सकता है। – ZoFreX

0

यदि उनमें से कोई भी गतिशील रूप से लोड हो जाता है, तो यह संभव है कि स्वचालित उपकरण उन्हें याद करेंगे। मैं फ़ाइलों पर पहुंच के समय को रीसेट कर दूंगा, कुछ समय के लिए एप्लिकेशन चलाऊंगा (और जितना संभव हो उतना कार्यक्षमता का आह्वान करना सुनिश्चित करें), और देखें कि कौन सी फाइलों को एक्सेस किया गया था और जो नहीं थे। आपको केवल उस मामले में चलाने के लिए आवश्यक प्रत्येक प्लेटफ़ॉर्म पर इसे दोहराने की आवश्यकता हो सकती है।

0

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

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

#!/bin/sh 
JBOSS_HOME=/path/to/jboss/installation 
JBOSS_LIB=$JBOSS_HOME/server/default/lib 
JBOSS_DEPLOY=$JBOSS_HOME/server/default/deploy 
SRC_DIR=src 

for f in $JBOSS_LIB/*.jar $JBOSS_DEPLOY/jboss-portal.sar/lib/*.jar $JBOSS_DEPLOY/jboss-portal.sar/portal-cms.sar/lib/*.jar $JBOSS_DEPLOY/ejb3.deployer/*.jar 
do 
    for c in `jar -tf $f | tr '/$' '..'` 
    do 
     #echo "^import ${c%.class};" 
     if `grep "^import ${c%.class};" -h -r $SRC_DIR -q` 
     then 
      echo $f $c 
     fi 
    done 
done 
संबंधित मुद्दे

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