2013-07-08 6 views
9

मैं निर्भरता बनाने और प्रबंधित करने के लिए मेवेन का उपयोग करके ग्रहण में जावा प्रोजेक्ट पर काम कर रहा हूं। परियोजना 5 ग्रहण परियोजनाओं में फैली हुई है, उनमें से एक माता पिता पीओएम है। मैं एक सर्वर कार्यान्वयन पर काम कर रहा हूं जो एक और अधिक जटिल सर्वर से दूर है जो एक और टीम लागू होती है। इसलिए मैंने अपने पूर्व-मौजूदा कोड और पीओएम फाइलों के अपने काम को बंद कर दिया, और अब इन ग्रहण परियोजनाओं में पीओएम में कई अनावश्यक निर्भरताएं हैं।एक्लिप्स में अनावश्यक मैवेन निर्भरताओं को कैसे सुरक्षित (सुरक्षित रूप से) हटाएं?

अपेक्षाकृत बोल, मैं एक Maven शुरुआत हूँ, लेकिन मैं इस आदेश से परिचित हूँ:

mvn dependency:analyze 

जब मैं इस आदेश को ग्रहण Maven प्लगइन का उपयोग कर चलाने के लिए, मैं "अप्रयुक्त की एक लंबी सूची घोषित हो जाएगा निर्भरता, "लेकिन जब मैं उनमें से कुछ को हटाने का प्रयास करता हूं, तो मेरा कार्यक्रम टूट जाएगा, कभी-कभी रहस्यमय तरीके से।

क्या इस समस्या से निपटने के लिए आम तौर पर स्वीकार्य, सर्वोत्तम अभ्यास तरीका है? या क्या मैं इन (संभवतः) अप्रयुक्त निर्भरताओं को एक-एक करके हटाने के लिए इस्तीफा दे रहा हूं, यह सुनिश्चित कर रहा हूं कि प्रत्येक को हटा दिए जाने के बाद कुछ भी टूटा न जाए?

+0

लापता निर्भरताओं के कारण उन्हें हटाए जाने के तुरंत बाद हाइलाइट कोड त्रुटियों को ग्रहण करता है? – vikingsteve

+0

नहीं, इन निर्भरताओं को हटाने के बाद कोई संकलन समय त्रुटियां नहीं हैं। इस स्थिति के बारे में यह परेशान बात है। –

+0

आपके पास रनटाइम निर्भरता हो सकती है जो संकलन त्रुटियों को इंगित नहीं करती है। उदाहरण के लिए, कॉन्फ़िगरेशन फ़ाइल को रनटाइम पर कार्यान्वित करने के लिए कार्यान्वयन लॉगिंग करना। – YMomb

उत्तर

1

आप जावा -verbose:class विकल्प के साथ अपना कोड चलाने का प्रयास कर सकते हैं। यह आपको दिखाएगा आउटपुट जेनरेट करेगा (कौन सी जार फ़ाइल) प्रत्येक वर्ग से लोड हो जाता है। (नोट: सूर्य JREs पर इस बाहर मानक के लिए लिखा जाता है, मैं आईबीएम JREs यह मानक त्रुटि के लिए लिखा जाता है पर लगता है।) यहाँ उत्पादन का एक उदाहरण है: अपने कार्यक्रम के तर्क के अधिकांश के माध्यम जब तक आप को चलाने के रूप में

[Loaded junit.framework.AssertionFailedError from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar] 
[Loaded junit.framework.ComparisonFailure from file:/D:/Documents%20and%20Settings/mike/.m2/repository/junit/junit/3.8.2/junit-3.8.2.jar] 
[Loaded org.jmock.core.SelfDescribing from file:/D:/Documents%20and%20Settings/mike/.m2/repository/jmock/jmock/1.2.0/jmock-1.2.0.jar] 
[Loaded org.apache.log4j.spi.Configurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar] 
[Loaded org.apache.log4j.xml.DOMConfigurator from file:/D:/Documents%20and%20Settings/mike/.m2/repository/log4j/log4j/1.2.9/log4j-1.2.9.jar] 

(ताकि आवश्यक वर्गों को लोड किया जा सके), आप सुरक्षित रूप से मान सकते हैं कि वर्बोज़ में वर्णित किसी भी जार: वर्ग आउटपुट को मैवेन निर्भरता के रूप में हटाया जा सकता है।

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

अभी भी मैन्युअल प्रयास का एक उचित हिस्सा है, लेकिन कम से कम यह आपको शुरू करने के लिए कहीं भी देगा!

+0

कम से कम दर्दनाक समाधान की तरह लगता है। मैं इसे आज़मा दूंगा, धन्यवाद! –

0

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

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