क्या ऐसे उपकरण हैं जो मेवेन बिल्ड प्रक्रिया को स्वयं प्रोफाइल करेंगे ताकि मैं देख सकूं कि निर्माण अधिकतर समय कहां खर्च कर रहा है?प्रोफाइलिंग मेवेन
हमें मेवेन 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 तक चलने वाले लाइसेंसिंग परिवर्तन हैं, और इसलिए वे अभी भी इसकी चर्चा कर रहे हैं।
धन्यवाद रॉबर्ट! मैंने जेपीरोफाइलर का एक मूल्यांकन संस्करण आज़माया और उस की सहायता से और जेकनसोल यह था कि मुझे पता चला कि यह कितना समय व्यतीत कर रहा था! मुझे डेवलपर्स सूची के लिए एक लिंक प्रदान करने के लिए धन्यवाद। मैं वहां अपना प्रश्न पोस्ट करूंगा! –
रॉबर्ट, मुझे सही दिशा में इंगित करने के लिए फिर से धन्यवाद। मैं [एक लिंक] (http://vivin.net/pub/maven-3.0.3-with-aether-1.12.zip) के साथ टिप्पणी कर रहा हूं मैवेन के एक संस्करण के लिए जो एक साथ 1.12 के साथ बनाया गया है। –
@ विविन - यह देखने में खुशी हुई कि आपको अपनी समस्या हल हो गई है। –