2009-12-23 3 views
14

मैं के बारे में 20 डेवलपर्स दुनिया भर में फैल के साथ एक बड़े Java EE/Maven/Hudson/Perforce परियोजना के लिए निर्माण को बनाए रखने।सर्वश्रेष्ठ अभ्यास

कोड स्वरूपण के लिए समाधान कोड Jalopy का उपयोग कर कोडबेस को प्रारूपित करना है जब डेवलपर बिल्ड चलाता है, जिससे किसी भी कोड को स्वरूपित नहीं किया गया है जो चेक-इन से पहले प्रारूपित हो जाता है।

इस समाधान के साथ मुख्य समस्या यह है कि यदि डेवलपर चेक करने से पहले पूर्ण मेवेन बिल्ड नहीं चलाता है (कहें कि वे Eclipse से यूनिट परीक्षण चलाते हैं) तो उनका कोड स्वरूपित नहीं होगा। फिर, फ़ाइल को संपादित करने वाले अगले डेवलपर में फ़ॉर्मेटर चलाने के बाद कोड के असंबद्ध खंडों में कई भिन्नताएं हो सकती हैं।

बड़ी परियोजनाओं पर आपके लिए कौन सी स्रोत स्वरूपण रणनीति ने सबसे अच्छा काम किया है? एक और विकल्प जिसे मैंने माना था, स्वचालित प्रक्रिया का उपयोग करके रात में स्वरूपण कर रहा है।

उत्तर

16

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

मैं समय के साथ प्रारूपण त्रुटियों का इतिहास रखने के लिए Sonar जैसे टूल का उपयोग करने का सुझाव भी दूंगा (उनकी टाइम मशीन कार्यक्षमता देखें)।

1

क्या आप चेकइन पर कोड को प्रारूपित करने के लिए पर्सफोर्स में चेकइन नियम सेट कर सकते हैं? मैंने प्रतिभा का उपयोग नहीं किया है, इसलिए मैं टिप्पणी नहीं कर सकता - लेकिन यह ऐसी चीज है जिसे हमने उचित माना होगा जब हमने हमारी टीम में कोड स्वरूपण प्रवर्तन विकल्पों पर चर्चा की थी।

2

यदि आपके डेवलपर के सभी (या अधिकतर) ग्रहण का उपयोग कर रहे हैं, तो आप स्वरूपण नियमों को निर्यात कर सकते हैं और अपनी टीम की पसंद में कार्यों को सहेज सकते हैं और हर कोई वही प्राथमिकताएं साझा कर सकता है।

+1

मैंने देखा है कि यह कई बार विफल रहता है। अगर मैवेन/चेकस्टाइल/हडसन का उपयोग कर स्वचालित निर्माण प्रक्रिया में एकीकृत किया गया है तो मुझे नियमों को ट्रैक/लागू करना बहुत आसान लगता है। –

+1

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

+0

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

0

यह बहुत मदद नहीं कर सकता है, लेकिन Go language source tree स्वचालित रूप से आपके द्वारा सेट की गई कमांड लाइन ऐप का उपयोग करके उसमें जो भी धक्का देता है उसे स्वरूपित करता है। यह Mercurial में किया गया है, Perforce नहीं। लेकिन, शायद आप देख सकते हैं कि उन्होंने यह कैसे किया। विवरण golang.org में कहीं होना चाहिए।

6

एक तरीका यह संभाल करने के लिए की तरह कुछ के साथ एक पूर्व प्रतिबद्ध हुक में कोड फ़ॉर्मेट करने के लिए किया जाएगा Jalopy या JIndent या यहाँ तक कि ग्रहण में निर्मित कोड फ़ॉर्मेटर (है कि आप invoke from the command line सकते हैं)। AFAIK, यह सुनिश्चित करने का एकमात्र तरीका है कि संस्करण कोड हमेशा ठीक से बनाया गया है यदि आप लोगों को आने से पहले स्वचालित निर्माण चलाने के लिए लागू नहीं कर सकते हैं। लेकिन मुझे नहीं पता कि क्या पर्सफोर्स पूर्व-प्रतिबद्ध हुक का समर्थन करता है।

यदि ऐसा नहीं होता है, तो दूसरा विकल्प Jalopy Maven Plugin या Maven Checkstyle Plugin का निर्माण समय पर उपयोग करना होगा और नियम को तोड़ने पर निर्माण विफल हो जाएगा (और सीआई इंजन इसकी रिपोर्ट करें)। कॉस्मेटिक चीजों के लिए विफलताओं का निर्माण हालांकि काफी परेशान हो सकता है।

तो, वास्तव में, कोड प्रारूपित करने के लिए रात की प्रक्रिया चलाना एक विकल्प हो सकता है। उस स्थिति में, Jalopy Maven Plugin या अन्य उल्लिखित टूल आपकी मदद कर सकते हैं, यह वास्तव में निर्भर करेगा यदि आप इस नौकरी के लिए मेवेन का उपयोग करना चाहते हैं या नहीं।

0

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

व्यक्तिगत रूप से हम केवल ग्रहण सहेजें क्रियाओं का उपयोग करते हैं, और सहेजते समय इसे सुधारने के लिए कहते हैं। हमारे लिए काफी अच्छा है।

14

अपनी परियोजनाओं के लिए लगातार स्वरूपण प्राप्त करने के लिए आपको उपकरण को स्वचालित रूप से करने के लिए कॉन्फ़िगर करने की आवश्यकता है। मैं निम्नलिखित सुझाव है: वहाँ वरीयताओं में एक विकल्प है

ग्रहण फ़ॉर्मेटर

ग्रहण के लिए (जावा> कोड style-> फ़ॉर्मेटर) जहां कॉन्फ़िगर कर सकते हैं कि कैसे आप अपने परियोजनाओं प्रारूप तैयार किया जाता करना चाहते हैं। एक नई प्रोफ़ाइल बनाएं और वहां अपनी कॉन्फ़िगरेशन डालें।

एक बार जब आप समाप्त कर लेंगे, तो एक निर्यात फ़ंक्शन होगा (यह अच्छी तरह छुपा हुआ है, संपादन पर क्लिक करें और फिर निर्यात करें)। कॉन्फ़िगरेशन को शेष टीम को पास करें ताकि वह इसे आयात कर सके।

ग्रहण सहेजें क्रिया

फिर भी फ़ॉर्मेटर कॉन्फ़िगर किया गया आप गारंटी होने आप स्वत: प्रारूप विन्यस्त करने की जरूरत इसलिए करने से पहले कि डेवलपर्स कोड प्रारूप होगा नहीं करता है।

वरीयताओं पर फिर से जाएं (जावा-> संपादक-> क्रियाएं सहेजें) और प्रारूप स्रोत कोड का चयन करें। इस तरह फ़ाइल को सहेजते समय कोड स्वरूपित किया गया है।

ग्रहण Checkstyle प्लगइन

कुछ डेवलपर्स ताकि आप उस का पता लगाने का कोई तरीका होना चाहिए सही ढंग से इन चरणों का करना है, भूल सकते हैं।

ग्रहण के लिए Checkstyle प्लग-इन इंस्टॉल:

  • गोटो मदद के> सॉफ़्टवेयर स्थापित करें ...
  • जोड़े http://eclipse-cs.sf.net/update/
  • नवीनतम checkstyle प्लग-इन इंस्टॉल

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

रिमोट कॉन्फ़िगरेशन होने का लाभ यह है कि आप इसे मैवेन-चेकस्टाइल-प्लगइन द्वारा भी संदर्भित कर सकते हैं और यह आपको सीआई सर्वर पर लॉन्च करके रिपोर्ट दे सकता है।

यदि आप हार्ड-कोर बनना चाहते हैं तो आप चेतावनियों के बजाय त्रुटियों में मूल कॉन्फ़िगरेशन (फॉर्मेटर द्वारा स्वचालित रूप से किए गए) सेट कर सकते हैं ताकि एक गलत कॉन्फ़िगर किए गए ग्रहण वाले डेवलपर को आने से पहले त्रुटि दिखाई दे।

पूर्व कॉन्फ़िगर किया गया ग्रहण

आप अगले स्तर तक जाने के लिए चाहते हैं, आप एक पहले से कॉन्फ़िगर ग्रहण बनाने के लिए, और अपने डेवलपर्स के लिए है कि संस्करण वितरित इतना है कि वे कुछ भी करने की जरूरत नहीं है।

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

+1

ग्रहण कोड को दोबारा सुधारने का एक भयानक तरीका है। हमारा अनुभव यह है कि यह लगातार सभी फाइलों को दोबारा सुधार नहीं करता है, इसलिए यह समय के साथ शाखाओं के बीच अंतर बनाता है। जलोपी, जैकोब, जिंदेंट, या ऐसा कुछ बेहतर है। – cdunn2001

2

इस के लिए सबसे अच्छा समाधान मैंने देखा है CXF द्वारा लिया गया दृष्टिकोण, Connecting Maven, Eclipse, Checkstyle, and PMD में विस्तार से वर्णित दृष्टिकोण है।

वे किसी अन्य उत्तर में वर्णित ग्रहण-सीएस प्लगइन डिमिटिस का उपयोग करते हुए Eclipse के साथ चेकस्टाइल को एकीकृत करते हैं। यह ग्रहण त्रुटियों को उत्पन्न करने की अनुमति देता है यदि उनका कोड किसी कोड स्वरूपण नियम को तोड़ देता है। वे Maven के साथ चेकस्टाइल को भी एकीकृत करते हैं, ताकि सत्यापन कोड विफल हो जाए, यदि उनका कोड चेकस्टाइल नियमों का पालन नहीं करता है। उनके पास एक्लिप्स के भीतर परिभाषित ऑटो-फॉर्मेटिंग नियमों का एक अनावश्यक सेट भी है, जो चेकस्टाइल के मानकों को पारित करने वाले कोड को त्वरित रूप से प्रारूपित करना आसान बनाता है।

यह ग्रहण के लिए बहुत सी कॉन्फ़िगरेशन का तात्पर्य है। वे मेवेन प्लगइन्स का संग्रह एकत्र करके इस चरण को स्वचालित करते हैं जो एक सीएक्सएफ-विशिष्ट वर्कस्पेस उत्पन्न करेगा, जिसमें आवश्यक चेकस्टाइल/ऑटोफॉर्मेटिंग कॉन्फ़िगरेशन शामिल है।