2011-07-13 11 views
11

क्या ऐसे उपकरण हैं जो मेवेन बिल्ड प्रक्रिया को स्वयं प्रोफाइल करेंगे ताकि मैं देख सकूं कि निर्माण अधिकतर समय कहां खर्च कर रहा है?प्रोफाइलिंग मेवेन

हमें मेवेन 3.0.3 और 3.0 बी 1 के संबंध में काम पर समस्याएं आ रही हैं। 3.0.3 (9 एम 00) की तुलना में हमारी परियोजना 3.0b1 (3m30s) के तहत बहुत तेज बनाता है। 3.0b1 के साथ बिल्ड लगभग 63% तेज है (यदि मेरा गणित सही है)।

मैंने मैवेन 3 के संबंध में प्रदर्शन तुलना और प्रदर्शन के मुद्दों की खोज करने की कोशिश की, लेकिन कुछ भी खोजने में असमर्थ था।

अद्यतन

मैं Maven स्रोतों को देखकर कुछ और शोध किया और यह मैं क्या पता चला है:

JConsole का उपयोग करते समय, मैंने देखा कि समय के सबसे अधिक (3.0.3 में है कि) DefaultProjectDependenciesResolver.java के अंदर बिताया जाता है। तो क्या हुआ यह देखने के लिए मैंने 3.0b1 और 3.0.3 दोनों को स्रोत डाउनलोड किया। मैंने देखा कि 3.0.3 में कक्षा के दो संस्करण हैं। एक org.apache.maven.project में है, जबकि दूसरा org.apache.maven में है। यह भी प्रतीत होता है कि 3.0.3 में, पूर्व का उपयोग किया जा रहा है। कोड के माध्यम से कदम है, मैंने देखा कि समय के थोक खर्च किया जाता है कि जब यह इस बयान तक पहुँच जाता है:

node = repoSystem.collectDependencies(session, collect).getRoot(); 

3.0b1 में, कोड करता है:

ArtifactResolutionResult result = repositorySystem.resolve(request); 

मैं यह भी देखा कि respositorySystem की है प्रकार RepositorySystem, और ठोस कार्यान्वयन LegacyRepositorySystem है। मुझे लगता है कि यह तब उपयोग किया जा रहा था जब मैवेन 3 बीटा में था जब तक कि नया कार्यान्वयन नहीं बनाया गया था? 3.0.3 पर वापस जाकर, collectDependencies विधि DefaultRepositorySystem.java में रहती है जो org.sonatype.aether.impl.internal का हिस्सा है। यह को DefaultDependencyCollector.java के अंदर कॉल करता है जो org.sonatype.aether.impl.internal का हिस्सा भी है। मुझे लगता है कि इस तरह निर्भरता ग्राफ बनाया गया है।

अब मैं सोच रहा हूं कि हमारी निर्भरता कैसे संरचित की जाती है। क्या किसी ने इस तरह के व्यवहार को पहले देखा है?

अद्यतन

JIRA में एक issue सुझाव दिया गया समाधान के साथ-साथ इस मुद्दे के बारे नहीं है। मैंने विवरण को उत्तर के रूप में पोस्ट किया है।

अद्यतन

समस्या है कि Maven 3.0.3 (1.11) में इस्तेमाल ईथर के संस्करण के कारण है। एक साथ संस्करण 1.12 इस समस्या को हल करता है। मैंने स्रोत 3.0.3 पर स्रोत की जांच की और पीओएम को 1.11 से 1.12 तक एथर्ड के संस्करण को बदलने के लिए संपादित किया। मैंने फिर स्रोत से मेवेन बनाया और मेरे वर्तमान संस्करण को मेरे द्वारा बनाए गए संस्करण के साथ बदल दिया। निर्माण के समय में कमी नाटकीय है।

यदि आप स्रोत से मेवेन बनाना नहीं चाहते हैं, तो आप एवेन पुस्तकालयों को प्रतिस्थापित कर सकते हैं जो मैवेन की lib निर्देशिका में 1.12 संस्करण के साथ हैं। यह भी काम करना चाहिए।

मुझे यकीन नहीं है कि यह परिवर्तन 3.0.4 में लाने जा रहा है, क्योंकि मैवेन डेवलपर्स ने कहा कि लाइसेंस 1.11 से एथर 1.12 तक चलने वाले लाइसेंसिंग परिवर्तन हैं, और इसलिए वे अभी भी इसकी चर्चा कर रहे हैं।

उत्तर

5

मैवेन सिर्फ एक सादा जावा एप्लिकेशन है, इसलिए मेरा सुझाव है कि आप इसे YourKit या JProfiler जैसे प्रोफाइलिंग टूल से शुरू करें और इसके रनटाइम प्रदर्शन का विश्लेषण करें। रनटाइम प्रदर्शन जानकारी निकालने के लिए आप JVisualVM का भी उपयोग कर सकते हैं।


सब कुछ, मुझे विश्वास है कि मेवेन डेवलपर्स इस प्रदर्शन प्रतिगमन के बारे में जानने में रुचि रखते हैं। कृपया Maven Jira में एक टिकट खोलने या Maven developers list

+0

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

+1

रॉबर्ट, मुझे सही दिशा में इंगित करने के लिए फिर से धन्यवाद। मैं [एक लिंक] (http://vivin.net/pub/maven-3.0.3-with-aether-1.12.zip) के साथ टिप्पणी कर रहा हूं मैवेन के एक संस्करण के लिए जो एक साथ 1.12 के साथ बनाया गया है। –

+0

@ विविन - यह देखने में खुशी हुई कि आपको अपनी समस्या हल हो गई है। –

2

रूपरेखा Maven बनाता है के सामान्य प्रश्न का सवाल है पर पोस्ट करने के बाद इस Codehaus JIRA issue कि mojos का निष्पादन समय outputting के लिए एक पैच प्रदान करता है। दुर्भाग्यवश, इसे अभी तक मेवेन में शामिल नहीं किया गया है।

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