2015-05-09 14 views
5

हमारे पास एक बड़ा जावा 8 स्प्रिंग हाइबरनेट मेवेन प्रोजेक्ट है जो बड़ा हो रहा है।जावा प्रोजेक्ट बहुत बड़ा हो रहा है

समस्याएं:

  • बिल्ड समय में सबसे अच्छा 10-12 मिनट है, 3 मिनट के बिना परीक्षण
  • हम पहले से ही शायद ही कभी संशोधित मॉड्यूल को छोड़ने के लिए एक कमांड लाइन स्विच, जो निर्माण प्रक्रिया के लक्षण व्यावहारिक सीमा तक पहुंच गया
  • है
  • ग्रहण परियोजना प्रबंधन करने के लिए (हालांकि इंटेलीजे अब के लिए ठीक है) जूझ रहा है
  • प्रोजेक्ट बढ़ने के साथ हालात और भी खराब हो रहे हैं, और परीक्षण टीम से अधिक परिदृश्य कोड आधार में एकीकरण परीक्षण के रूप में अव्यवस्थित हो जाते हैं।

अब

  • परियोजना के बारे में 20 Maven मॉड्यूल में कॉन्फ़िगर किया गया है, तो लगता है कि हम कैसे काम:
 
    Parent 
    |--- Tier1 
    |--- Tier2 
    |--- WebTier 
     |---- ModuleA 
     |---- ModuleB 
     |---- ModuleC 
     |---- ... 
     |---- Entities 
     |---- Shared 
     |---- Batch 
     |---- IntegrationTests 
  • आवेदन एक भी युद्ध के रूप में बनाया गया है
  • डेवलपर एक एकल स्तर (typicall तैनात) वाई WebTier) ग्रहण या इंटेलिजे से अपने स्थानीय टोमकैट
  • पर एक आर्टेफैक्ट के रूप में हालांकि परियोजना मॉड्यूल में अच्छी तरह से विभाजित होती है, लेकिन उनके बीच कई अवांछित युग्मन बिंदु हैं। Shared, जहां आवश्यकता होगी, "पार मॉड्यूल" मॉड्यूल का उपयोग उनकी सेवाओं डाल में विशेष रूप से
  • सभी एकीकरण परीक्षणों एक समर्पित मॉड्यूल में कर रहे हैं (पता नहीं क्यों)

विचार इसे बेहतर बनाने के

  • एक MessageBroker मॉड्यूल जोड़ें जहां प्रासंगिक ढीले युग्मन को अनुमति दें। हो सकता है कि JMS, या बस तुल्यकालिक संचार
  • के लिए एक गूंगा में स्मृति घटक Shared मॉड्यूल से छुटकारा
  • यकीन है कि मॉड्यूल मोटे सुक्ष्म प्रवेश अंक
  • भाई बहन के बीच अवांछित युग्मन निकालें और संदेश दलाल जब पसंद करते हैं बनाओ संभव
  • Entities रख सकते हैं। कम से कम कोर-बिजनेस इकाइयां (ग्राहक, ग्राहकफाइल, ...)। लेकिन कुछ संस्थाओं स्पष्ट रूप से एक भी मॉड्यूल के हैं (एक बैच निष्पादन की जानकारी Batch मॉड्यूल में होगा)

इस तरह, ModuleA में एक परिवर्तन कर किसी को भी समय की सबसे केवल निर्माण और बिना कि मॉड्यूल में रन परीक्षण होगा आवेदन तोड़ने से डरते हुए।

प्रश्न

  • करता है कि एक अच्छी योजना की तरह लग?अच्छा, मैं भविष्य प्रूफ मतलब है, के साथ अच्छे अवसरों को चीजों में सुधार करने, और काम का अत्यधिक मात्रा में स्थिति को देखते हुए की जरूरत नहीं
  • हम टियर 1 प्रति ग्रहण/IJ परियोजना, आईडीई शिल्पकृति का निर्माण और यह तैनात जाने होना चाहिए टोमकैट के लिए, या हमारे पास प्रति मॉड्यूल 1 प्रोजेक्ट, और नेक्सस की निर्भरता होनी चाहिए? या शायद बाद का विकल्प अधिक है?
  • कोई अन्य सुझाव?

कुछ मीट्रिक

  • विंडोज 7, जावा 8, Maven 3.0.3, TestNG।
  • एसएसडी या 7200rpm HDD के (सीमित प्रभाव)
  • 6Gb रैम
  • ढेर 1GB (Maven) जेनकींस
साथ
  • सीआई

    धन्यवाद एक गुच्छा!

  • +0

    ऐसा लगता है कि आप या तो एक बड़ा ढेर या अधिक रैम (या दोनों) पड़ सकता है। –

    +0

    क्या आप परियोजना के आकार के बारे में कुछ और जानकारी दे सकते हैं? वास्तव में केवल 20 मेवेन मॉड्यूल और 10-13 मिनट का समय लगता है (बहुत धीमी गति से लगता है)। कितने परीक्षण चल रहे हैं? परीक्षण कब तक करते हैं? आप किस मेवेन संस्करण का उपयोग कर रहे हैं? कोड की कितनी पंक्ति (सोनारक्यूब द्वारा माप?) क्या आप जेनकींस जैसे सीआई समाधान चला रहे हैं? किस प्रकार के कमांड लाइन स्विच के बारे में आप बात कर रहे हैं? क्या आपके पास समर्पित बिल्ड मशीन है? कितनी रैम/सीपीयू इत्यादि और इस मशीन की किस तरह की हार्ड डिस्क है? कामकाजी स्टेशनों में कितना रैम/सीपीयू है? कौन सा ऑपरेशन सिस्टम? – khmarbaise

    +0

    @khmarbaise कमांड लाइन स्विच कुछ ही कभी-कभी इस्तेमाल किए गए मॉड्यूल को छोड़ने के लिए एक मैवेन प्रोफाइल से मेल खाता है '-DskipSomeModules'। यहां कुछ खास नहीं है, सिर्फ एक क्विर्क जो दिखाता है कि हम इसे सही आईएमओ नहीं कर रहे हैं। हमारे पास जेनकींस के साथ सीआई है लेकिन यह यहां अप्रासंगिक प्रतीत होता है: यह स्थानीय देव निर्माण है जो दर्द होता है, और यह अक्सर युग्मन की वजह से पूर्ण युद्ध का निर्माण करके किया जा सकता है। कल अनुरोधित जानकारी के साथ आप पर वापस आ जाएगा। धन्यवाद। – youri

    उत्तर

    1

    सीआई असली जवाब होगा, लेकिन ऐसा लगता है जैसे यह होना चाहिए कि आपके परियोजना मॉड्यूलर नहीं है। आप हर परियोजना को हर समय खरोंच से नहीं बनाते हैं। आप जार बनाते हैं, विभिन्न परियोजनाओं में उनका परीक्षण करते हैं और फिर एकल आइटम के रूप में उपयोग करते हैं। प्रत्येक परियोजना को काफी छोटा होना चाहिए और केवल एक क्षेत्र को कवर करना चाहिए। क्या आपको लगता है कि जब जावा आईओ पैकेज पर काम करते हैं तो जावा सुरक्षा सुरक्षा जार कहते हैं? विभाजित करें और जीतें - यह ओओपी और encapsulation का पूरा विचार है।

    +0

    नहीं मॉड्यूलर के रूप में के रूप में यह निश्चित रूप से लगता है, इसलिए है कि प्रयोग से ... 'चलाने के लिए mvn -टी 3' अलावा जाँच कर ली है मेरी सवाल यह है कि मैं इसे कैसे बेहतर बना सकता हूं। मुझे अपने साथियों को यह समझाना है कि वर्तमान स्थिति दर्दनाक है और लंबे समय तक टीम को चोट पहुंचाएगी, और हम एक योजना पर भरोसा कर सकते हैं और विश्वास कर सकते हैं कि रिफैक्टरिंग प्रयास इसके लायक होगा। – youri

    +0

    यह अधिक वास्तुशिल्प प्रश्न है जिसका पूर्ण विश्लेषण किए बिना उत्तर नहीं दिया जा सकता है। कम से कम कक्षा आरेख खींचें और देखें कि कौन से कनेक्शन हैं। – Alex

    0

    यह के रूप में बुरा के रूप में आपको लगता है नहीं हो सकता है। यूनिट परीक्षणों और स्थैतिक विश्लेषण के साथ शामिल परियोजनाओं में कुछ समय लगता है।

    एक कंपनी मैं था> 1 ghante निर्माण + unittest + CodeCoverage एकीकरण समय के लिए काम किया। यह 26 भाषाओं x 8 समर्थित ओएसएस पर इंस्टॉलर के स्वचालित क्लिकथ्रू परीक्षण के लिए vSphere पर आर्टिफैक्ट को बंद करने के लिए आवश्यक समय की गणना नहीं करता है।

    +0

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

    +0

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

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